【问题标题】:Ajax Laravel return view 500 ErrorAjax Laravel 返回视图 500 错误
【发布时间】:2016-11-23 08:20:08
【问题描述】:

我通过 Ajax 将幻灯片 (Jquery Ui Slider) 中的每个滑块值获取到我的控制器。

Slider + Ajax 看起来像这样:

    $("#sliderNumCh").slider({
        range: "min",
        min: 0,
        max: 20,
        step: 1,
        value: numbersOfChapters,
        change : function(e, slider){
            $('#sliderAppendNumCh').empty();
            var sliderValue  = slider.value;
            var getSliderVal = document.getElementById('sliderValue').value = sliderValue;
            var getPrId      = document.getElementById('editId').value;

            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });
            $.ajax({
                type: 'post',
                url: "{{ Route('editProductPost', $product->id) }}",
                headers: {
                    'X-Requested-With': 'XMLHttpRequest'
                },
                data: {
                    value: getSliderVal,
                    productId : getPrId
                },
                success: function (option) {
                    console.log(getSliderVal);
                }
            });
        },
    });

所以我确实有这个想法:

<meta name="csrf-token" content="{{ csrf_token() }}">

我的路线是这样的:

Route::post('edit/{productID}', ['as' => 'editProductPost', 'uses' => 'ProductController@editProductPost']);

在我的 Controller 方法中,我这样称呼它:

public function editProductPost(Request $request)
{
    $sliderValue = $request->get('value');
    Log::info($sliderValue);

    return view('productRom.edit', [
        'sliderValue' => $sliderValue
    ]);
}

Log::info($sliderValue) 告诉我,我确实在每张幻灯片上都得到了正确的滑块值。

当我尝试返回到我的编辑视图时,我在控制台中收到此错误:

POST http://localhost/myApp/public/product/edit/73 500(内部 服务器错误)

我该如何解决这个问题?

编辑

因为我认为这行:

<form action="{{ route($route) }}"...>

路由变量没有定义,所以我在返回语句中添加了这个。

return view('productRom.edit', [
    'sliderValue' => $sliderValue,
    'route' => 'editProductPost'
]);

错误消失了,但是当我尝试像这样访问 $sliderValue 变量时:

<p>{{ isset($sliderValue) ? $sliderValue : "nothing" }}</p>

它打印我nothing

编辑

控制器:

    public function editProductPost(Request $request)
    {

        return response()->json([
            'sliderValue' => $request->get('value')
        ]);
   }

查看(ajax):

        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            type: 'post',
            url: "{{ Route('editProductPost', $product->id) }}",
            headers: {
                'X-Requested-With': 'XMLHttpRequest'
            },
            data: {
                value: getSliderVal,
                productId : getPrId
            },
            success: function (response) {
                // check it has some data
                if (response.length) {
                    // spit it out
                    console.log(response);
                } else {
                    console.log('nothing returned');
                }
            }
        });

【问题讨论】:

  • 您说“当我尝试返回到我的编辑视图时,我在控制台中收到此错误”尝试单击发布请求,您会在预览下看到什么?
  • @haakym 好的,我想我可以快速编辑问题
  • 1.你还没有完成我在第一条评论中所说的。 2. 正如我在前几天的聊天中所说的“......您的 editProduct 方法返回一个视图,如果您将它用于 ajax,请不要返回视图,返回 json 数据”chat.stackoverflow.com/transcript/message/31766104#31766104 - 希望很清楚。
  • 嗯好的,所以我不能用 ajax 返回视图。但是如何进一步使用该 json 数据呢?
  • 看我的回答。我认为您需要阅读有关 ajax 请求如何工作的文档,然后您就会明白为什么不能返回视图。想想你为什么使用 ajax 请求,这样你就不需要离开当前页面/即当前视图 - 那你为什么要把它传回视图。返回视图适用于不使用 ajax 的情况。您想返回 json,以便您的 $.ajax 成功方法可以使用它。

标签: javascript php jquery ajax laravel


【解决方案1】:

您的控制器方法应如下所示:

public function editProductPost(Request $request)
{
    return response()->json([
        'sliderValue' => $request->get('value')
    ]);
}

您不应该将视图返回给 ajax 请求。

您的 ajax 成功方法应如下所示(例如):

// first arg is the data returned by the controller method
success: function (response) {
    console.log(response);
}

它应该输出如下内容:

{
    'sliderValue': 4
}

【讨论】:

  • 嗯,我会编辑我的答案,让你知道我是如何编辑的(仍然没有工作)
【解决方案2】:

您的路线被命名为 editProductPost,但您正在搜索 editProduct

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 2016-12-15
    • 2019-11-12
    • 2016-06-19
    • 2016-06-06
    • 2017-11-13
    • 2016-08-20
    • 2023-03-19
    相关资源
    最近更新 更多