laravel 在ajax發出的請求經過中介軟體路由重定向失敗
阿新 • • 發佈:2018-12-29
今天在處理ajax發出的請求經過中介軟體路由重定向失敗,在網上搜了很多的材料最終發現這樣的一段解釋:”我們使用傳統的表單來發送資料到應用。然而,很多應用使用AJAX請求。在AJAX請求中使用validate方法時,Laravel不會生成重定向響應。取而代之的,Laravel生成一個包含驗證錯誤資訊的JSON響應。該JSON響應會帶上一個HTTP狀態碼422。”並且這個返回的訊息不能夠ajax的success(data)獲取,laravel 不走這個地方。要這樣做才可以獲取的返回的資料:
$.ajax({
url: "這裡填寫請求地址",
type:"post", //請求型別
data:data.field, //請求的資料
dataType:"json", //資料型別
success: function(data){
//laravel返回的資料是不經過這裡的
},
error: function(msg) {
var json=JSON.parse(msg.responseText);
alert(json.name); //到這裡終於拿到返回name欄位的錯誤資訊了
},
})
其實我們可以判斷是否是AJAX發出的請求如果是的話我們就在重定向的地方返回JSON資料而不是HTML資料,我們可以自定義JSON資料的內容返回後交給AJAX來進行跳轉。
在網上找到這樣一種說法:'先說前端使用jQuery時怎麼區分:
jQuery發出ajax請求時,會在請求頭部新增一個名為X-Requested-With的資訊,資訊內容為:XMLHttpRequest
在後端可以使用$ _SERVER [“HTTP_X_REQUESTED_WITH”]來獲取。(注意:中劃線換成了下劃線,不區分大小寫)
“
isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"
這樣的話我們就可以在重定向後的方法中進行判斷如果是阿賈克斯則:
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER ["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
$message_result = new MessageResult;
$message_result->URL = '目標url';
$message_result->message = 'ajax請求';
return json_encode($message_result);
}
從而返回給前端來進行重定向請求。