首页 > 解决方案 > 在 Laravel 中使用 Fetch API 拉取数据时,`$request->ajax()` 未检测到 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!';
}

它总是返回“不是 Ajax!”;

我不确定为什么会这样。这不是其他库的问题,例如jQueryorAxios

标签: phpajaxlaravelfetch

解决方案


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

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

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

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


推荐阅读