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

时间:2018-07-20 04:43:07

标签: javascript ajax laravel axios middleware

我正在使用axioslaravel 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,一切都会正常,问题是当我检查返回$request->ajax()的{​​{1}}时,我直接在false之外检查了它在middleware中,但结果相同,这是怎么回事?如果调用是通过ajax进行的,为什么返回controlelr

1 个答案:

答案 0 :(得分:4)

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

如果您问我,您根本不应该使用或依赖此标头,(我想)是为了易于从jQuery(确实包含标头)迁移而来,基本的Laravel样板bootstrap.js具有代码:

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

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