JSONP 事件提供未经授权的消息

Posted

技术标签:

【中文标题】JSONP 事件提供未经授权的消息【英文标题】:JSONP events give unauthorized message 【发布时间】:2013-02-07 02:02:36 【问题描述】:

下面的代码在收到“401 - Unauthorized”错误时会抛出错误,而不会转到 .fail 或 .always。有没有办法触发失败并检索来自服务器响应的错误 [myErrorMessage]?

javascript

$(document).ready(function() 

    var jqXHR = $.ajax(
        url: "http://[myDomain]/[myPage]",
        dataType: "jsonp",
        jsonpCallback: "myFunction"
    )
        .done(function()  alert("success"); )
        .fail(function()  alert("error"); )
        .always(function()  alert("complete"); );

    function myFunction(data) 
        alert("callback");
    

);

请求结果

GET http://[myDomain]/[myPage]?callback=myJsFunction&_=1361463044315 HTTP/1.1
Host: [myDomain]
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (Khtml, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Referer: http://[myTotallyDifferentDomain]/Default.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

响应结果

HTTP/1.1 401 Unauthorized
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 21 Feb 2013 16:10:42 GMT
Content-Length: 67

"Message":"[myErrorMessage]"

Chrome 结果

GET http://[myDomain]/[myPage]?callback=myJsFunction&_=1361463044315 401 (Unauthorized) jquery.min.js:5

【问题讨论】:

【参考方案1】:

从 jQuery 1.9 开始,JSONP 请求在出错时不会转到失败处理程序,这是记录在案的行为。

据我所知,没有办法解决它。 (当然,除了使用代理)

http://api.jquery.com/jQuery.ajax/

【讨论】:

谢谢。在我发帖之前,我已经检查了该网站。寻找一种解决方法,即使它会迫使我使用较低版本的 jQuery。由于行为导致异常,我需要抑制它。 @cilerler 正如您在此处看到的:jsfiddle.net/NtzLQ/1 使用 感谢演示,但我明白我无法抓住它的部分,这没关系。但我需要抑制投掷。我的意思是我不需要知道发生了什么这很好,但是当它达到 500 等时。无论 try-catch 或 .ajaxError 是什么,它都会引发页面停止。 :( hmm...应该不会影响代码执行,不是代码错误。 在任何情况下,您都可以通过在服务器上发出请求并将来自服务器的客户端请求作为代理来完全抑制错误。

以上是关于JSONP 事件提供未经授权的消息的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 中的 401 未经授权的错误处理

烧瓶不和谐 api 错误 “消息”:“401:未经授权”,“代码”:0

用户未经授权时的 Laravel 护照自定义错误消息和状态码

清除剪贴板以禁止未经授权的复制,插入消息?

在 Spring Security 中处理基本身份验证的未经授权的错误消息

在 Spring Security 中处理基本身份验证的未经授权的错误消息