2012-11-14 53 views
0

這是一個更好的方式來做一個串行asyn調用。Serial Asynchrounous XmlHTTPRequest

http://ajaxian.com/archives/serial-async-xhr

function run() { 
    request1(function() { 
     request2(function() { 
      request3(function() { 
       done(); 
      }); 
     }); 
    }); 
} 

這會不會導致回調地獄的問題?

+0

不,回調是要走的路 - 但是這個代碼是可怕的。考慮到每個函數看起來有多相似,我會爲XHR編寫一個包裝器。 – Snuffleupagus

+0

@Snuffleupagus:你能告訴我一個相同的例子嗎? – theJava

回答

0

這是不是防彈,只是給你一個例子。

function ajax(url, callback) { 
    var req = new XMLHttpRequest(); 
    req.open("GET", url, true); 
    req.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      if(callback) 
      { 
       callback(this.responseText); 
      } 
     } 
    }; 
    req.send(); 
} 

爲一個包裝,所以你最終做一些像

function loadIndex() 
{ 
    ajax('/', function(data){ 
     alert(data); 
     loadIndexAgain(); 
    }); 
} 

function loadIndexAgain() 
{ 
    ajax('/', function(data){ 
     alert('more stuff happened'); 
    }); 
} 

loadIndex(); 

和您的語句將被鏈接。

fiddle