在XHR函数之外,XHR上的回退失败

时间:2014-06-20 09:44:15

标签: javascript jquery

我正在做一个XMLHttpRequest,如果它失败了我想做其他事情(读取本地文件),但我想在XHR函数(getDBfileXHR)本身之外做它。

我也在使用Jquery。

考虑到它似乎不适用于.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();
    });
}

1 个答案:

答案 0 :(得分:1)

嗯,这可能是这样的:

   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){});