var object = {
ver: "version",
time: "time",
xhr: new XMLHttpRequest(),
method: "POST",
error: JSON.stringify({
api: object.ver,
err: "server",
time: object.time
});
},
servers = {
srv1:"http://srv1.example.com",
srv2:"http://srv2.example.com",
srvErr:"http://err.example.com"
},
data = JSON.stringify({
api: object.ver,
time: object.time
});
function cors(object, server) { // Cross domain XHR request
if ("withCredentials" in object.xhr) {
object.xhr.open(object.method, server, true);
} else if (typeof XDomainRequest != "undefined") {
object.xhr = new XDomainRequest();
object.xhr.open(object.method, server);
} else {
object.xhr = null;
}
return object.xhr;
}
function ajax(data, object, server, servers) {;
try {
var x = cors(object, server);
x.setRequestHeader("Content-Type","application/json;charset=UTF-8", 'X-Requested-With', 'XMLHttpRequest');
x.onreadystatechange = function() {
if (x.readyState != 4) {
return;
}
if(x.status==200){
console.log("success: ", data);
}
n++;
if (x.status != 200) {
console.log("2", data);
ajax(data, object, servers.srv2, server);
//second call
ajax(object.error, object, servers.srvErr, servers);
//third call
}
};
x.send(data);
} catch (e) {
console.log(e.message);
}
}
ajax(data, object, servers.srv1, servers); // first call
我嘗試在ajax調用內向我自己的服務器發出兩個異步ajax調用,以防外部ajax調用失敗。我得到的結果是,只有最後一次Ajax調用才真正離開瀏覽器到服務器。我不能使用回調,因爲我只需要這兩個Ajax調用,以防第一次失敗。ajax失敗遞歸純javascript
主要的竅門 - 我不能使用jQuery,這阿賈克斯應該是跨瀏覽器兼容 - > IE8,9。我已經在我的服務器上對它進行了測試,並且它與跨域一起工作。唯一的事情就是打破我的想法,如何讓這段代碼在第一次失敗時運行2個Ajax調用。我不需要COMET(訂閱)或WebSockets。
請幫我一個人。
我簡化了代碼,並將所有函數放在這裏 – Justfly