2016-03-08 117 views
-1

我遇到了Ajax請求的問題,我想使用jQuery發佈一些數據。我不得不說,之前與GET它工作正常,但我有很多數據發送,我得到:(Request-URI Too Long)所以,因爲我要改變發佈。jQuery Ajax不會在POST請求中發送數據

我工作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錯誤,當我嘗試讀取變量在控制器中。

我在Laravel路線爲:

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

如果我把return 'Hallo!';文本返回爲好,那麼,一看就知道是sended到我做出了控制器的所有變量:

dd(Input::all()); 

但它打印一個空數組。所以,對於我看到的問題不是路由,而是我用ajax發送數據的方式 謝謝!

+0

請將您的Laravel路徑發佈到此Ajax查詢。 –

+0

假設你正在使用nginx,large_client_header_buffers應該解決這個問題。 HTTP://計算器。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請求。這並不重要,如果你是路由不使用網絡中間件,但由於你沒有發佈你的所有routes.php你應該確保。

如果你確實使用網絡組中間件可以包括CSRF令牌,你頭的meta標籤:

<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 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...}); 
}); 
+0

好吧,這是否解決了您的問題? – mehany

+0

@mehany是的,Laravel需要它的CRSF標記 –