$request->ajax() returns 在 ajax 调用时为 false
$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
,一切都会正常,问题是当我检查 $request->ajax()
和 return false
时,我已经在middleware
直接在 controlelr
但是结果是一样的,怎么了?为什么 return false
如果调用是通过 ajax 进行的?
Axios 不发送 Laravel 查找的 X-Requested-With
header 来确定请求是否为 AJAX。
如果您问我,您根本不应该使用或依赖此 header,但(我猜)是为了便于从 jQuery 迁移(其中确实包括 header) 基本 Laravel 样板 bootstrap.js 有代码:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
这确保使用 Axios 发出的所有请求都得到此 header,但是如果您不使用该文件,则需要 运行 您自己的脚本中的这一行。
我正在用 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
,一切都会正常,问题是当我检查 $request->ajax()
和 return false
时,我已经在middleware
直接在 controlelr
但是结果是一样的,怎么了?为什么 return false
如果调用是通过 ajax 进行的?
Axios 不发送 Laravel 查找的 X-Requested-With
header 来确定请求是否为 AJAX。
如果您问我,您根本不应该使用或依赖此 header,但(我猜)是为了便于从 jQuery 迁移(其中确实包括 header) 基本 Laravel 样板 bootstrap.js 有代码:
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
这确保使用 Axios 发出的所有请求都得到此 header,但是如果您不使用该文件,则需要 运行 您自己的脚本中的这一行。