【问题标题】:Undefined variable when returning view as HTML via AJAX通过 AJAX 将视图返回为 HTML 时未定义的变量
【发布时间】:2021-07-05 23:04:21
【问题描述】:

我是 Laravel 的新手,我正在尝试在添加新类别时添加视图。我总是收到错误:

未定义变量:类别(查看:..new.blade.php)...第 1 行

这是我目前所拥有的:

CategoryController.php

public function store(Request $request)
    {
        $request->validate([
            'name' => 'required'
        ]);

        $category = new Category();
        $category->name = $request->name;
        $category->save();

        $returnHTML = view('categories.new', compact($category))->render();
        return response()->json(array(
            'success' => true, 
            'html' => $returnHTML,
            'icon' => 'success',
            'title' => 'Added',
            'msg' => 'Category successfully added.'
        ));
    }

script.blade.php

$('#category-submit').click( function() {
        var name = $('#name').val();
        let _url = '/categories';
        let _token = $('meta[name="csrf-token"]').attr('content');

        $.ajax({
            url: _url,
            type: 'POST',
            data: {
                name: name,
                _token: _token
            },
            success: function(data) {
                $('tbody').prepend(data.html);

                $('#name').val('');

                $('#category-modal').modal('hide');

                Swal.fire({
                    title: data.title,
                    text: data.msg,
                    icon: data.icon,
                    showConfirmButton: false,
                    timer: 1500
                });
            },
            error: function(xhr) {
                console.log(xhr.responseText);
            }
        });
    });

new.blade.php

<tr id="category-{{ $category->id }}">
    <td>{{ $category->name }}</td>
    <td>
        <button class="btn btn-inverse-primary btn-icon-text">
            <i class="ti-pencil btn-icon-prepend"></i> Edit
        </button>
        <button data-id="{{ $category->id }}" class="category-delete btn btn-inverse-danger btn-icon-text">
            <i class="ti-trash btn-icon-prepend"></i> Delete
        </button>
    </td>
</tr>

老实说,我不知道自己做错了什么。似乎来自控制器的$category 不会传递给new.blade.php。任何帮助将不胜感激。

【问题讨论】:

  • 尝试使用$returnHTML = view('categories.new', compact('category'))-&gt;render();

标签: ajax laravel laravel-8


【解决方案1】:

here in php doc 所述,您应该在compact() 方法中将变量名称作为字符串传递。

$returnHTML = view('categories.new', compact('category'))->render();

或者您可以使用数组将变量传递给刀片文件。

$returnHTML = view('categories.new', ['category' => $category])->render();

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2013-04-01
    • 2020-08-21
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多