如何在 jquery 中获取 406 错误(不可接受)
Posted
技术标签:
【中文标题】如何在 jquery 中获取 406 错误(不可接受)【英文标题】:How to get 406 Error (not acceptable) in jquery 【发布时间】:2013-09-05 09:38:06 【问题描述】:我在 my.js 中进行错误处理,在那里我对其他服务器进行跨域调用,对于动态 html 模板,我正在使用 Mustache.js。
$.getJSON(url, function(data, textStatus, xhr)
$.each(data, function(i, data)
introPage(data);
);
).fail(function(Error)
alert(Error.status);
);
function introPage(data )
$.getJSON('myphp.php?jsoncallback=?&template='+testTemplate, function(msg)
// my operations
).error(function(data)
);
我们在 getJSON 中有 .fail() 来捕获 getJSON 中的错误。我能够捕获 404 错误(未找到),但是当涉及 406 错误(不可接受或说无效输入)或 401 错误(未经授权的访问)时,.fail() 似乎不起作用
但在控制台中抛出错误
当我点击链接时。它以以下格式在 jquery 回调中显示错误
jQuery191014790988666936755_1378113963780(
"error":
"code": 406,
"message": "Not Acceptable: Sorry, There are no results to display for the given input."
);
现在我想知道如何在我的 JS 中得到这个错误。我没有收到错误代码 406 和 401。我需要该错误代码以便显示相应的错误页面。
谢谢
【问题讨论】:
你被打了,你被一个狡猾的罪犯打了。还有Same Origin Policy @RoryMcCrossan:我不明白???即使涉及两台服务器,但都在同一个域下!比为什么同源政策。 子域不同。对于 AJAX 请求,域必须完全相同——具体到协议。 @Rory:脚本和 JSONP 请求不受同源策略限制。 @RoryMcCrossan :我所理解的是,当我使用 getJSON 调用我的 php 'url' 时,它返回了错误,但它没有在 .fail() 中向我显示错误,因为对于某些原因错误出现在 jquery 日志或其他任何内容中......所以问我如何捕获该错误 【参考方案1】:从jsoncallback=?
参数和响应jQuery191...780(...)
来看,jQuery 似乎正在生成一个 JSONP 请求。 JSONP 请求不受同源策略限制,但它们确实有以下限制as described here:
注意:跨域脚本不会调用此 [error] 处理程序,并且 跨域 JSONP 请求。
解决办法:
-
如果服务器允许跨域请求,则创建纯 JSON 请求
查看以下问题的答案:
How do I catch jQuery $.getJSON [...] error when using JSONP?
jQuery ajax (jsonp) ignores a timeout and doesn't fire the error event
使用jquery-jsonp——它不会给你HTTP错误代码
【讨论】:
如果我删除 jsoncallback=? .......我收到错误 XMLHttpRequest 无法加载<a href="/default/index/tourl?u=aHR0cDovL2V4YW1wbGUuY29tL215cGhwLnBocD8mdGVtcGxhdGU9aW50cm9QYWdlLmh0bWw%3D" rel="nofollow" target="_blank">example.com/myphp.php?&template=introPage.html</a>。 Access-Control-Allow-Origin 不允许来源<a href="/default/index/tourl?u=aHR0cDovL215TG9jYWw%3D" rel="nofollow" target="_blank">myLocal</a>。
........
恐怕这是因为 Same Origin Policy 在这种情况下您必须使用 JSONP 在这种情况下您无法检查 HTTP 状态。
所以没有办法解决这个问题......我的意思是我们应该做些什么......总有解决问题的方法?? @萨尔曼A
如果您控制另一个脚本(发送 JSON 数据或引发 404 错误的脚本),您只需将 this header 添加到该脚本:Access-Control-Allow-Origin: *
。另一种解决方案是在您的服务器上托管一个跨域代理脚本。以上是关于如何在 jquery 中获取 406 错误(不可接受)的主要内容,如果未能解决你的问题,请参考以下文章
android 改造后注销请求给出错误 406 不可接受:用户未登录。...在邮递员 api 上工作正常
Spring @RestController,spring-boot 出现意外错误(类型=不可接受,状态=406)