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 的不同字符串的主要内容,如果未能解决你的问题,请参考以下文章

引导表无法识别使用 AJAX 生成的行

jQuery.ajax() 成功/失败回调何时调用?

JQuery Ajax - 如何在进行 Ajax 调用时检测网络连接错误

使用 Jquery 的同步“Ajax”调用似乎不起作用

在 IE 的 jQuery Ajax 成功函数中无法识别选择器

Django 似乎无法识别 jquery - 现在是啥>