JQuery Ajax не отправляет данные в петиции POST

-1

У меня возникают проблемы с запросом Ajax, я хочу опубликовать некоторые данные с помощью jQuery. Я должен сказать, что раньше с GET он отлично работает, но у меня есть много данных для отправки, и я получаю: (Request-URI Too Long) поэтому для меня я переписываюсь.

Я работаю над Laravel, я изменил маршрут, чтобы получить сообщение, метод в контроллере называется правильно, но по какой-то причине петиция ajax не отправляет данные (группы и сегменты).

Группы и сегменты - это массивы Javascript, как я уже сказал, он отлично работает с GET, но он терпит неудачу, когда данные слишком длинны.

Мой текущий код выглядит следующим образом:

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

Я тоже пытался добавить следующие строки:

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

Но у меня был тот же результат, я получаю ошибку 500, когда пытаюсь прочитать переменные в контроллере.

Мой маршрут в Ларавеле:

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

если я верну return 'Hallo!'; текст также возвращается, чтобы увидеть все переменные, которые были отправлены контроллеру, который я сделал:

dd(Input::all());

но он печатает пустой массив. Итак, для того, что я вижу, проблема не в маршруте, а в том, как я отправляю данные с помощью ajax. Спасибо!

  • 0
    Опубликуйте свой маршрут Laravel для этого запроса Ajax, пожалуйста.
  • 0
    предполагая, что вы используете nginx, large_client_header_buffers должен решить эту проблему. stackoverflow.com/questions/1067334/...
Показать ещё 4 комментария
Теги:
post

2 ответа

1

Попробуйте добавить косую черту в свой URL:

$.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'));

Также кажется, что не существует токена CSRF, включенного в запрос ajax. Это не имеет значения, если вы на маршруте не используете веб-промежуточное программное обеспечение, но поскольку вы не опубликовали все ваши маршруты. 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...  
   }); 
}); 
  • 0
    ничего, мужик, это был токен CSRF. Большое спасибо за уделенное время
  • 0
    Нет проблем. Если мой ответ помог решить ваш вопрос, пожалуйста, примите решение.
0

После многих попыток я заметил, что запрос на отправку в Laravel должен иметь прикрепленный токен 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...});
});
  • 0
    хорошо, так это решило вашу проблему?
  • 0
    @ mehany да, Laravel для этого нужен токен CRSF

Ещё вопросы

Сообщество Overcoder
Наверх
Меню