我有一个简单的javascript,它使用来自JQuery的JQuery(),非常适合GET/POST。但是,对于代理后面的一些用户来说,他们会收到下面文章中概述的407错误。
现在,正如您将看到的,我更新了这篇文章,声明JSONP的使用将足以作为一种解决办法。我现在的情况是,我不想一直使用JSONP,只有在需要的时候才使用。
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()函数?
发布于 2011-07-11 18:49:52
我最初的回答(下面)是处理函数名覆盖,以适应您的问题中的代码。但是,有一个更好的解决方案,因为毕竟,您只希望将所有请求切换到JSONP当且仅当您收到了407响应代码。
$.ajaxSetup()正是为了做到这一点而设计的:
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中的函数:
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()。您甚至可以更改该函数并同时调用它的替换:
407: function() {
(window.original = foo)();
}https://stackoverflow.com/questions/6649092
复制相似问题