jQuery 似乎无法识别具有 Ajax 调用状态码 403 的不同字符串
Posted
技术标签:
【中文标题】jQuery 似乎无法识别具有 Ajax 调用状态码 403 的不同字符串【英文标题】:jQuery doesn't seem to recognize a different string with an Ajax call statuscode 403 【发布时间】:2012-04-13 21:34:04 【问题描述】:我有一个有趣的情况,我不确定是我的错还是 jQuery 的错,因此我想咨询你们。
目前我正在执行 Ajax 调用,它返回 403 状态代码。但是403附带的字符串与标准不同。
它返回403 access denied
,但根据规范它应该是403 Forbidden
。
我知道如何从服务器获取 200 状态码,问题更多在于如何处理这种情况。
这是我的 Ajax jQuery 代码,它不会出现在任何 console.log()
情况下。
this.get = function()
var callUrl = self.url + "&limit=" + self.limit + "&page=" + self.page;
callUrl += self.getFilterQuery();
callUrl += "&callback=?";
console.log(callUrl);
$.ajax(
url: callUrl,
dataType: 'json',
success: function(response)
console.log(response);
,
statusCode:
403: function(response)
console.log('error');
console.log(response);
,
error: function(response)
console.log(response);
);
注意:URL 是正确的,我可以获得 200 状态码,但我想处理 403 access denied
。我该如何解决?
【问题讨论】:
你试过从浏览器打开callUrl
吗?
您在控制台中究竟看到了什么?
【参考方案1】:
看起来这个调用实际上不是使用 XHR 请求而是通过 JSONP 进行的。 ("callback=?" in your URL) - 对于 JSONP 请求,状态码信息不可用。您需要确保始终发送有效响应。
见http://api.jquery.com/jQuery.ajax/
【讨论】:
是否有解决方案来获取该信息。它也不会出现在 error() 函数中。那为什么会这样呢? JSONP 请求是通过在文档中插入<script>
标记来发出的 - 如果指定的 url 以错误状态代码响应,浏览器会简单地忽略该请求并且等待结果的回调永远不会得到调用(因为即使有内容,相应的javascript也不会被执行)。因此,jQuery 不知道某些事情没有解决,也无法通过调用您的错误函数来通知您。 - 如果您需要进行 JSONP 调用,请始终发送 200 Ok 并在响应中包含实际状态信息。
如果您无法控制响应,因为您正在请求外部 API 或其他任何东西......好吧......那么你就完蛋了。
@Niko 你是说 jQuery 在查询字符串中找到 callback
时会自动将 dataType 更改为 JSONP?
是:“如果 URL 包含字符串“callback=?”(或类似的,由服务器端 API 定义),则将请求视为 JSONP。来自api.jquery.com/jQuery.getJSON【参考方案2】:
参考这个看看你是否可以确定具体的拒绝。 http://en.wikipedia.org/wiki/HTTP_403检查引发错误的目录的设置。
【讨论】:
以上是关于jQuery 似乎无法识别具有 Ajax 调用状态码 403 的不同字符串的主要内容,如果未能解决你的问题,请参考以下文章
JQuery Ajax - 如何在进行 Ajax 调用时检测网络连接错误