Laravel - 检查是否为 Ajax 请求
Laravel - 检查是否为 Ajax 请求
我一直在尝试找到一种方法来确定Laravel中的Ajax调用,但是我没有找到任何关于它的文档。\n我有一个index()
控制器函数,我希望根据请求的性质以不同的方式处理响应。基本上,这是一个绑定到GET请求的资源控制器方法。\n
public function index() { if(!$this->isLogin()) return Redirect::to('login'); if(isAjax()) // 这就是我需要的。 { return $JSON; } $data = array( 'records' => $this->table->fetchAll() ); $this->setLayout(compact('data')); }
\n我知道在PHP中确定Ajax请求的其他方法,但我想要一些特定于Laravel的东西。\n谢谢\n更新:\n我尝试使用\n
if(Request::ajax()) { echo 'Ajax'; }
\n但是我收到了这个错误:\n不应从不兼容的上下文中调用非静态方法Illuminate\\Http\\Request::ajax()
\n该类显示这不是一个静态方法。
问题的原因是使用了错误的Request类。如果想要使用Facade的方式,比如Request::ajax()
,需要导入Illuminate\Support\Facades\Request
类,而不是Illumiante\Http\Request
。
解决方法之一是注入一个真实请求类的实例:
public function index(Request $request){ if($request->ajax()){ return "AJAX"; }
(现在你需要导入Illuminate\Http\Request
)
你是对的,我已经修复了。有个其他的人在上面放了一个use语句,我没有注意到。谢谢:)
在使用Laravel进行开发时,有时候需要判断当前请求是否为Ajax请求。通常情况下,我们可以使用$request->ajax()
方法来判断。但是,如果在JavaScript库中没有设置X-Requested-With HTTP头,$request->ajax()
方法可能无法正常工作。
解决这个问题的方法是使用$request->wantsJson()
方法来判断是否为Ajax请求。这个方法不需要X-Requested-With头的设置,它会直接检查axios请求是否为JSON类型。
默认情况下,Laravel会在js/bootstrap.js中设置X-Requested-With头,代码如下所示:
window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
但是在我的情况下,我使用了不同的前端代码,需要手动设置X-Requested-With头才能让$request->ajax()
方法正常工作。
使用$request->wantsJson()
方法的好处是它符合HTTP规范中关于内容协商的规定。因此,如果你的控制器需要决定是否以JSON格式响应,使用$request->wantsJson()
方法是一个更好的选择,而不是使用$request->ajax()
方法。
Laravel - 检查是否为Ajax请求
在Laravel中,有时需要判断当前请求是否为Ajax请求。下面是一种判断方法:
/** * Display a listing of the resource. * * Illuminate\Http\Request $request * Response */ public function index(Request $request) { if($request->ajax()){ return "AJAX"; } return "HTTP"; }
以上代码中,通过使用`$request->ajax()`方法判断当前请求是否为Ajax请求。如果是Ajax请求,则返回"AJAX";如果不是Ajax请求,则返回"HTTP"。
如果在控制器中使用了`Illuminate\Http\Request`的命名空间,以上方法将有效。
另外,还可以使用`request()->ajax()`方法来判断是否为Ajax请求。这种方法同样有效,并且在Laravel 5.2版本中测试通过。
希望以上内容对您有所帮助!