2011-04-05 122 views
0

在我的應用程序開始時,我需要發送三個ajax get(Dojo xhrGET)請求,但問題是我需要從第一個處理數據時發送第二個數據,當我從第二個數據處理數據時發送第三個數據(順序很重要!) 。我把這個請求放在其他的後面,但它有時不起作用。如何同步和解決這個問題,有沒有什麼辦法像Java一樣鎖定或等待?如何在處理來自請求的數據之前發送ajax請求?

回答

1

如果您使用的是1.6,請查看新的Promises API(由dojo.xhrGet返回),或使用1.5中的延遲。他們提供了一個「整潔」的方式來實現這一點。

從本質上講,你可以寫:

dojo.xhrGet({ 
    url: './_data/states.json', 
    handleAs: 'json' 
}).then( 
    function(response) { 
     // Response is the XHR response 
     console.log(response); 
     dojo.xhrGet({ 
      url: './_data/'+response.identifier+'.json', 
      handleAs: 'json' 
     }).then(
      function(response2) { 
       // The second XHR will fail 
      }, 
      // Use the error function directly 
      errorFun 
     ) 
    }, 
    function(errResponse) { 
     // Create a function to handle the response 
     errorFun(err); 
    } 
) 

var errorFun = function(err) { 
    console.log(err); 
} 

瞭解更多信息

http://dojotoolkit.org/documentation/tutorials/1.6/deferreds/http://dojotoolkit.org/documentation/tutorials/1.6/promises/
1

您可以使用選項sync = true,並將請求放在其他之後。這樣,第3名將在第1名之後的第2名之後發送。 或者您可以在第一次使用加載函數完成後發送第二個請求。 例子:

dojo.xhrGet({ //1st request 
    load: function(){ 
     dojo.xhrGet({ //2nd request 
      load: function(){ 
       dojo.xhrGet({ //3nd request 

       }); 
      } 
     }); 
    } 
}); 

欲瞭解更多信息:http://dojotoolkit.org/reference-guide/dojo/xhrGet.html

0

我們能夠在第一請求的成功回調方法的第二個Ajax請求: $阿賈克斯({

'type' : 'get', // change if needed 
'dataType' : 'text', // data type you're expecting 
'data' : { 'className' : divClass }, 
'url' : url, 
'success' : function(newClass) { 
    //make the second ajax request... 
} 

} );

並對第三個請求做同樣的事情。