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

这是我在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 }); 

和触发链接

 Try 

和我的路线

 Route::post('test', function() { return 'Success! ajax in laravel 5'; }); 

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

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

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

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

为每个页面(或主布局)添加元标记:

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

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

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

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

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

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

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

 {!! csrf_field() !!} 

然后在你的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 }); 

在App \ Http \ Middleware \ VerifyCsrfToken.php中,您可以尝试将文件更新为:

 class VerifyCsrfToken extends BaseVerifier { private $openRoutes = [ ...excluded routes ]; public function handle($request, Closure $next) { foreach($this->openRoutes as $route) { if ($request->is($route)) { return $next($request); } } return parent::handle($request, $next); } }; 

这允许您明确绕过您不想validation的特定路由,而不会全局禁用csrfvalidation。

您可以将您的URL添加到VerifyCsrfToken.php中间件。 这些URL将从CSRFvalidation中排除。

 protected $except = [ "your url", "your url/abc" ]; 

默认情况下,Laravel附带CSRF中间件。

你有2个选择:

  1. 在您的请求中发送令牌
  2. 禁用CSRF中间件(不推荐):在app \ Http \ Kernel.php中从$ middleware数组中删除VerifyCsrfToken

对我来说这个错误导致了不同的东西。 我的页面中有两个ajax调用。 第一个用于保存注释,另一个用于保存。 在我的routes.php我有这个:

 Route::post('posts/show','PostController@save_comment'); Route::post('posts/show','PostController@save_like'); 

我得到500内部服务器错误为我的保存像ajax调用。 所以我将第二行http请求类型更改为PUT,错误消失。 你也可以使用PATCH。 也许有帮助。

使用post jquery代替我帮助我解决了这个问题

 $.post('url', data, function(response) { console.log(response); }); 

你必须通过ajax传递csrf字段,请在这里查看代码

 $.ajax({ type: "POST", url:'{{URL::to("/delete-specialist")}}', data: { id: id, _token: $('#signup-token').val() }, datatype: 'html', success: function (response) { if(response=="deleted"){ $("#"+id).hide(); $("#message").html("successfully deleted"); } } }); 

并且您还需要在此之前编写此输入字段

  

如果您不明白,请欣赏此videohttps://www.youtube.com/watch?v=ykXL8o0slJA&t=20s