【问题标题】:500 Internal Server Error Ajax Laravel500 内部服务器错误 Ajax Laravel
【发布时间】:2016-03-24 06:12:38
【问题描述】:

我正在尝试向

http://localhost:8888/test


JS

$('.saveBTN').click(function (event) {

    $( "form#editForm" ).on( "submit", function( event ) {
      event.preventDefault();

      var inputs = {};
      $("#editForm :input").each(function() {
        inputs[$(this).attr("name")] = $(this).val();
      });

      var $inputs = JSON.stringify(inputs);

      $.ajax({
          headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
          url: '/test',
          type: 'POST',
          dataType: 'json',
          data: $inputs,
          success: function (data, textStatus, xhr) {

              console.log(data);
          },
          error: function (xhr, textStatus, errorThrown) {

              console.log('PUT error.');
          }
      });

});

我一直在努力

500 内部服务器错误

我试过添加

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

这在我的 Ajax 上

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

对此的任何提示将不胜感激!

【问题讨论】:

  • 启动检查员查看 500 响应的完整详细信息,这将使您更好地了解正在发生的事情。猜测是路由您在错误处理中说 PUT 错误,但正在发出 POST 请求您是否在路由上寻找 PUT?
  • 你的路由是什么样子的?
  • 你能检查存储文件夹中的日志文件是否有错误堆栈吗?
  • 500 错误表示服务器上的脚本出现错误。检查您的服务器日志。

标签: php jquery ajax laravel laravel-5


【解决方案1】:

在下面的表单中添加这个。

// This will generate token field which will be token
{{ csrf_field() }}  


// Expected Output
<input type="hidden" name="_token" value="ssdfdsfsdfsdfs32r23442">

VerifyCsrfToken.php - 文件为 middleware,包含在 web 中间件组中,将自动验证请求输入中的 token 是否与会话中存储的令牌匹配。

有关更多信息,请参阅此 URL: http://laravel.com/docs/master/routing#csrf-x-csrf-token

更新 - 2016 年 12 月 23 日

从 laravel 开始,你也可以像下面这样使用。

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="POST">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

API 参考:https://laravel.com/docs/master/routing#form-method-spoofing

【讨论】:

    【解决方案2】:

    像下面 cmets 中提到的 @Paulpro@Mark Davidson 一样,meta 标记应该具有 content 属性而不是值:

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

    而不是:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2020-02-12
      • 2018-04-16
      • 1970-01-01
      • 2019-05-12
      • 2015-09-20
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多