laravel 5中的ajax发布返回错误500(内部服务器错误)

Jul*_*eto 20 php ajax jquery laravel laravel-5

这是我在laravel 5中的测试ajax(参见下文)

$("#try").click(function(){
    var url = $(this).attr("data-link");
    $.ajax({
        url: "test",
        type:"POST",
        data: { testdata : 'testdatacontent' },
        success:function(data){
            alert(data);
        },error:function(){ 
            alert("error!!!!");
        }
    }); //end of ajax
});
Run Code Online (Sandbox Code Playgroud)

和触发链接

<a href="#" id="try" data-link="{{ url('/test') }}">Try</a>
Run Code Online (Sandbox Code Playgroud)

和我的路线

Route::post('test', function()
{
    return 'Success! ajax in laravel 5';
});
Run Code Online (Sandbox Code Playgroud)

但是当我在谷歌浏览器中运行控制台并且它没有返回预期的响应"返回'成功!在laravel 5中的ajax'时,它给了我错误;"

POST http://juliver.laravel.com/test 500(内部服务器错误)

什么错误/我的代码有问题?什么我失踪了?

Ben*_*Ben 48

虽然这个问题存在了一段时间,但没有给出接受的答案,我想指出你的解决方案.因为您使用ajax发送,并且可能仍然使用CSRF中间件,所以您需要为您的请求提供额外的标头.

为每个页面(或主布局)添加元标记: <meta name="csrf-token" content="{{ csrf_token() }}">

并添加到您的javascript文件(或页面中的部分):

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅https://laravel.com/docs/master/csrf#csrf-x-csrf-token.


Met*_*ani 12

laravel ajax内部服务器错误的90%是由于缺少CSRF令牌.其他原因可以包括:

  • 错误的请求类型(例如发送帖子以获取)
  • 收到了错误的数据类型(例如,ajax期待JSON和app返回字符串)
  • 您的.htaccess配置错误
  • 缺少路线
  • 代码错误

您可以在此处详细了解详情:https://abbasharoon.me/how-to-fix-laravel-ajax-500-internal-server-error/


Kha*_*ukh 7

我想这已经解决了,但是这里最好的办法就是用你的表单发送令牌

{!! csrf_field() !!}
Run Code Online (Sandbox Code Playgroud)

然后在你的ajax

$("#try").click(function(){
var url = $(this).attr("data-link");
$.ajax({
    url: "test",
    type:"POST",
    data: { '_token': token, 'someOtherData': someOtherData },
    success:function(data){
        alert(data);
    },error:function(){ 
        alert("error!!!!");
    }
}); //end of ajax
});
Run Code Online (Sandbox Code Playgroud)

  • 检入位于storage / logs文件夹中的laravel.log文件 (2认同)