Javascript XHR失败时的回退,在XHR函数之外
我正在做一个XMLHttpRequest,如果失败,我想退一步做其他事情(读取本地文件),但我想在XHR函数(getDBfileXHR)本身之外做 我也在使用Jquery 考虑到它似乎不适用于Javascript XHR失败时的回退,在XHR函数之外,javascript,jquery,Javascript,Jquery,我正在做一个XMLHttpRequest,如果失败,我想退一步做其他事情(读取本地文件),但我想在XHR函数(getDBfileXHR)本身之外做 我也在使用Jquery 考虑到它似乎不适用于.done()和.fail()这一事实,它可能与延迟变量或其他东西一起工作,这怎么可能呢 getDBfileXHR( encode_utf8("http://john:hispasswd@mysite.com/DBfile.jsonp") ); //here I want to do something e
.done()
和.fail()
这一事实,它可能与延迟变量或其他东西一起工作,这怎么可能呢
getDBfileXHR( encode_utf8("http://john:hispasswd@mysite.com/DBfile.jsonp") );
//here I want to do something else if getDBfileXHR fails like this :
fallbackToLocalDBfile();
function getDBfileXHR(url) {
var request = new XMLHttpRequest();
request.open("GET", url, true); //3rd parameter is sync/async
request.onreadystatechange = function() { //Call a function when the state changes.
if (request.readyState == 4) {
if (request.status == 200 || request.status == 0) {
console.log('we get a response from XHR');
var jsonText = request.responseText.replace("callback(", "");
jsonText = jsonText.replace(");", "");
storeJsonInProdata(JSON.parse(jsonText));
dbReadyDeferred.resolve();
} else {
console.log('error : request.status = '+request.status);
}
}
}
console.log("Sending XMLHttpRequest...");
request.send();
}
function fallbackToLocalDBfile(){
$.get('proDB.jsonp').done(function(data){
console.log(data);
//storeJsonInProdata(data);
//dbReadyDeferred.resolve();
});
}
嗯,大概是这样的:
var d=$.Deferred()
function getDBfileXHR(url) {
....
if (request.readyState == 4) {
...
d.resolve(_MyData);
} else {
console.log('error : request.status = '+request.status);
d.reject(_myError);
}
}
}
console.log("Sending XMLHttpRequest...");
request.send();
}
d.done(function (a){...}).fail(function (b){});