2016-03-08 2 views
-1

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

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

Группы и сегменты представляют собой массивы 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'=>'[email protected]')); 

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

dd(Input::all()); 

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

+0

Отправьте свой маршрут Laravel для этого запроса Ajax, пожалуйста. –

+0

assunming вы используете nginx, large_client_header_buffers должны решить эту проблему. Http: // StackOverflow.com/questions/1067334/how-to-set-the-allowed-url-length-for-a-nginx-request-error-code-414-uri-too – mehany

+0

@AlexeyMezenin отредактирован! –

ответ

1

Попробуйте добавить слеш в свой адрес:

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

Route::post('/check',array('as'=>'check','uses'=>'[email protected]')); 

Кроме того, представляется, что нет 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

ОК, так это решило вашу проблему? – mehany

+0

@mehany да, для Laravel нужен токен CRSF –

Смежные вопросы