首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测407错误并对所有后续请求持久化

检测407错误并对所有后续请求持久化
EN

Stack Overflow用户
提问于 2011-07-11 11:01:25
回答 1查看 1.6K关注 0票数 1

我有一个简单的javascript,它使用来自JQuery的JQuery(),非常适合GET/POST。但是,对于代理后面的一些用户来说,他们会收到下面文章中概述的407错误。

需要407代理身份验证

现在,正如您将看到的,我更新了这篇文章,声明JSONP的使用将足以作为一种解决办法。我现在的情况是,我不想一直使用JSONP,只有在需要的时候才使用。

代码语言:javascript
复制
 function original() {
     $.ajax({
         url: "http://somecool.url/foo",
         data: { id:"bar"},
         statusCode: {
             407: foo()
         },
         success: function(data) {
             $.each(data, function(k,v) {
                 $('#foo').append("<li>" + k + ":" + v + "</li>");
             });
         }
     });
 }    


 function foo() {
     $.ajax({
         url: "http://somecool.url/foo",
         data: { id:"bar" },
         dataType: "jsonp",
         success: function(data) {
             $.each(data, function(k,v) {
                 $('#foo').append("<li>" + k + ":" + v + "</li>");
             });
         }
     });
 }

 $(document).ready(function() {
     original();
 });

是否有可能保持第一个失败的状态,当存在代理问题时返回407错误,这样所有后续请求都不会转到original()函数并转到foo()函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-11 18:49:52

我最初的回答(下面)是处理函数名覆盖,以适应您的问题中的代码。但是,有一个更好的解决方案,因为毕竟,您只希望将所有请求切换到JSONP当且仅当您收到了407响应代码。

$.ajaxSetup()正是为了做到这一点而设计的:

代码语言:javascript
复制
function original() {
    $.ajax({
        url: "http://somecool.url/foo",
        data: { id:"bar"},
        statusCode: {
             407: function() {
                 $.ajaxSetup({ dataType: "jsonp" });
                 // Now all AJAX requests use JSONP, retry.
                 original();
             }
        },
        success: function(data) {
            $.each(data, function(k,v) {
                $('#foo').append("<li>" + k + ":" + v + "</li>");
            });
        }
    });
}

使用此策略,一旦接收到407,所有未来的AJAX请求都将使用JSONP。

为了历史的缘故,这是我最初的答案。

第一次收到original响应代码时,可以永久更改存储在407中的函数:

代码语言:javascript
复制
function original() {
    $.ajax({
        url: "http://somecool.url/foo",
        data: { id:"bar"},
        statusCode: {
             407: function() {
                 window.original = foo;
                 foo();
             }
        },
        success: function(data) {
            $.each(data, function(k,v) {
                $('#foo').append("<li>" + k + ":" + v + "</li>");
            });
        }
    });
}

从那时起,original的名称将引用foo()。您甚至可以更改该函数并同时调用它的替换:

代码语言:javascript
复制
407: function() {
    (window.original = foo)();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6649092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档