【问题标题】:jQuery Ajax doesn't send data in POST petitionjQuery Ajax 不在 POST 请求中发送数据
【发布时间】:2016-03-08 18:50:24
【问题描述】:

我在处理 Ajax 请求时遇到问题,我想使用 jQuery 发布一些数据。我不得不说,在使用GET 之前它工作正常,但是我有很多数据要发送并且我得到:(Request-URI Too Long) 所以,为此我要更改发布。

我正在使用 Laravel,我将路由从 get 更改为 post,控制器中的方法被正确调用,但由于某种原因,ajax 请愿书没有'不发送数据(组和段)。

组和段是 Javascript 数组,正如我所说,它适用于 GET,但当数据太长时它会失败。

我当前的代码如下所示:

$.ajax({
   type: "POST",
   data: {groups:groups, segments:segments},
   url: "check",
   success: function(msg){ 
             //something... 
          }); 
  });

我也尝试添加以下行:

contentType: 'application/json; charset=utf-8',

但是我得到了相同的结果,当我尝试读取控制器中的变量时出现错误 500。

我在 Laravel 的路线是:

Route::post('check',array('as'=>'check','uses'=>'FileController@checkfile'));

如果我输入return 'Hallo!';文本也被返回,那么,查看发送到我创建的控制器的所有变量:

dd(Input::all());

但它会打印一个空数组。因此,对于我所看到的问题不是路线,而是我使用 ajax 发送数据的方式 谢谢!

【问题讨论】:

  • 请为这个 Ajax 查询发布你的 Laravel 路由。
  • 假设您使用的是 nginx,large_client_header_buffers 应该可以解决这个问题。 stackoverflow.com/questions/1067334/…
  • @AlexeyMezenin 已编辑!
  • 你试过在url前加斜杠吗:'/check';还有你的 Route::post('/check', array.....) ?
  • @CanCelik 嗨!,是的,我也试过了,但没有

标签: jquery ajax laravel post


【解决方案1】:

尝试在您的网址中添加斜杠:

$.ajax({
   type: "POST",
   data: {groups:groups, segments:segments},
   dataType: 'JSON',
   url: "/check",
   success: function(msg){ 
             //something... 
          }); 
});

Route::post('/check',array('as'=>'check','uses'=>'FileController@checkfile'));

似乎也没有包含在 ajax 请求中的 CSRF 令牌。如果您的路由没有使用网络中间件,这并不重要,但由于您没有发布所有 routes.php,您应该确保。

如果您确实使用网络组中间件,您可以在标题中包含 CSRF 令牌作为元标记:

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

并与您的 ajax 请求一起传递。

var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');

$.ajax({
   type: "POST",
   data: {_token: CSRF_TOKEN, groups:groups, segments:segments},
   dataType: 'JSON',
   url: "/check",
   success: function(msg){ 
         //something...  
   }); 
}); 

【讨论】:

  • 没什么,是 CSRF 令牌。非常感谢您的宝贵时间
  • 没问题。如果我的回答有助于解决您的问题,请接受作为解决方案。
【解决方案2】:

在尝试了很多事情之后,我注意到 Laravel 中的 post 请求需要附加 CSRF 令牌,所以我在 HTML 中添加了这一行来修复它:

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

然后,在 Ajax 请求中添加 beforSend 属性,那么请求将是这样的:

$.ajax({
     type: "POST",
     data: {groups:groups, segments:segments},
     url: "check",
     async: true,
     beforeSend: function (request) {
                       return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content'));
                   },
     success: function(msg){ //something...});
});

【讨论】:

  • @mehany 是的,Laravel 需要 CRSF 令牌
猜你喜欢
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多