2014-06-20 2 views
1

XMLHttpRequest를 수행하고 있는데 실패 할 경우 다른 작업 (로컬 파일 읽기)을 수행하고 싶습니다.하지만 XHR 함수 외부에서 수행하려고합니다. getDBfileXHR) 자체.XHR 함수에서 벗어난 XHR에서 오류가 발생했습니다.

저는 Jquery도 사용하고 있습니다.

.done().fail()과 작동하지 않는 것 같으면 지연 변수 또는 다른 것을 사용하면 어떨까요? 이 아마도 같은

getDBfileXHR(encode_utf8("http://john:[email protected]/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

음 뭔가 :

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

감사합니다! 간단! – Louis

관련 문제