У меня возникают проблемы с запросом 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. Спасибо!
Попробуйте добавить косую черту в свой 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...
});
});
После многих попыток я заметил, что запрос на отправку в 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...});
});