Laravel无法识别Postman发起的请求为Ajax请求
解决Laravel中
$request->ajax()在Postman请求下返回FALSE的问题 我来帮你搞定这个问题!其实核心原因是Laravel的$request->ajax()方法判断逻辑和你想的不一样,它并不依赖Accept: application/json头,而是看请求里有没有X-Requested-With: XMLHttpRequest这个特殊头。
为什么会这样?
Laravel的ajax()方法底层是检查X-Requested-With请求头是否等于XMLHttpRequest——这是jQuery等前端框架发起AJAX请求时默认会带上的头,但Postman不会自动添加这个头,所以即使你加了Accept: application/json,$request->ajax()还是会返回false。
解决方案1:给Postman添加X-Requested-With请求头
在Postman的请求头列表里新增一条:
- 键:
X-Requested-With - 值:
XMLHttpRequest
添加之后再发起请求,$request->ajax()就会正确返回true了。
解决方案2:改用更适合API场景的判断方法
如果你的接口主要是给API调用(比如Postman、移动端)用的,推荐用$request->wantsJson()或者$request->isJson()来替代ajax():
$request->wantsJson():会检查请求的Accept头是否包含application/json,或者请求是AJAX类型,兼容性更广。$request->isJson():检查请求的Content-Type头是否是application/json。
举个代码例子:
// 原来的代码 if ($request->ajax()) { // 处理AJAX请求 } // 改成更适合API的写法 if ($request->wantsJson()) { // 处理API/AJAX请求 }
这样不管是前端AJAX请求,还是Postman这类API工具调用,都能正确识别。
内容的提问来源于stack exchange,提问作者Harpreet Singh
相关产品推荐
相关产品推荐

