[英]$request->ajax() returns false on ajax call
我正在使用axios
向laravel
controller
發出ajax請求,我想使用middleware
來檢查request
是否是用ajax
發出的,但問題是當我發出ajax request,
middleware
總是拋出false
。
我這樣打
axios.post('/api/contact/send', {
...
data : data
}).then((response) => {
Do somethings
}).catch(err => {
Do somethings
})
我的api路線
Route::namespace('Home')->middleware('IsAjaxRequest')->domain(env('HOST'))->group(function(){
....
Route::post('contact/send','ContactController@postContact');
});
IsAjaxRequest
中間件
if(!$request->ajax()) {
abort(403, 'Unauthorized action.');
}
return $next($request);
和控制器
<?php
namespace App\Http\Controllers\Home;
use Illuminate\Http\Request;
use App\Events\Home\ContactMail;
use App\Http\Controllers\Controller;
use App\Http\Requests\ContactRequest;
class ContactController extends Controller
{
//
public function postContact(ContactRequest $request)
{
$data = $request->all();
event(new ContactMail($request->all()));
return response()->json();
}
}
如果我取出middleware
,一切都會正常工作,問題是當我檢查返回false
$request->ajax()
,我已經直接在controlelr
在middleware
外部檢查了它,但是結果是一樣的,這是怎么回事? 如果通過ajax進行調用,為什么返回false
?
Axios不會發送Laravel查找以確定請求是否為AJAX的X-Requested-With
標頭。
如果您問我,您根本不應該使用或不依賴於此標頭,而是(我想)是為了輕松地從jQuery(確實包含標頭)遷移而來,基本的Laravel樣板bootstrap.js具有以下代碼:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
這樣可以確保使用Axios發出的所有請求都獲得此標頭,但是,如果不使用該文件,則需要在自己的腳本中運行此行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.