簡體   English   中英

$ request-> ajax()在ajax調用中返回false

[英]$request->ajax() returns false on ajax call

我正在使用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 ,一切都會正常工作,問題是當我檢查返回false $request->ajax() ,我已經直接在controlelrmiddleware外部檢查了它,但是結果是一樣的,這是怎么回事? 如果通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM