$request->ajax() 在 ajax 调用时返回 false



我正在用axioslaravelcontroller发出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 AppHttpControllersHome;
use IlluminateHttpRequest;
use AppEventsHomeContactMail;
use AppHttpControllersController;
use AppHttpRequestsContactRequest;
class ContactController extends Controller
{
//
public function postContact(ContactRequest $request)
{
$data  = $request->all();
event(new ContactMail($request->all()));
return response()->json();
}
}

如果我取出middleware,一切都会好起来,问题是当我检查返回false$request->ajax()时,我已经在middleware之外直接在controlelr中检查了它,但结果是一样的,怎么了?如果调用是通过ajax进行的,为什么要返回false

Axios不会发送Laravel查找的X-Requested-With标头,以确定请求是否为AJAX。

如果你问我你根本不应该使用或依赖这个头,但(我想(为了方便从jQuery(它确实包括头(迁移,基本的Laravel样板引导.js有代码:

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

它确保所有使用Axios发出的请求都能获得此标头,但是,如果您没有使用该文件,则需要在自己的脚本中运行此行。

最新更新