'$request->ajax()' 在使用 Fetch API 在 Laravel 中提取数据时不会检测到 ajax 请求



在我的Laravel应用程序中,我正在使用Fetch API在滚动时加载数据。以下是我在刀片文件中的JS代码

let route = '{{ route("load") }}' + '?q=' + encodeURI('{{ $para }}');
fetch(route)
.then(response => {
if(!response.ok) {
throw new Error('Network response was not ok');
}
return response.text();
})
.then(data => {                       
console.log(data);                       
})
.catch((error) => {
console.error('Error:', error);
})

在我的控制器中

public function loadData( Request $request )
{
if( $request->ajax() ) {
return $request->query('q');
}
return 'Not Ajax!';
}

它总是返回"不是阿贾克斯!

我不确定为什么会发生这种情况。对于jQueryAxios等其他库来说,这不是问题

Request::ajax()检查X-Requested-With标头是否存在。

由于您使用的是 fetch,因此您必须手动将此标头添加到选项对象:

fetch(route, {
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
})

例如,由于引导.js文件的设置方式,Axios 默认使用它。 jQuery会自动为每个请求添加它,但跨域请求除外。

请尝试使用 request((->ajax(( 函数而不是$request->ajax((。我认为问题是您在顶部导入了错误的请求。它也发生在我身上,因为编辑器

在方法中使用"return"时要小心。尝试将返回"不是阿贾克斯!在别的

else{
return 'Not Ajax!';
}

最新更新