2012-06-12 27 views
1

使用jQuery AJAX調用web服務。電話必須被鏈接。基於https://stackoverflow.com/a/995648/296575的解決方案,我創建了一個AJAX隊列。多鏈式jQuery AJAX POST web服務調用

function ajaxQueue(step) { 
      switch(step) { 
      case 0: $.ajax({ 
         type: "POST", 
         url: "url", 
         data: SoapRequest1, 
         contentType: "text/xml", 
         complete: storeData1       
        }); break; 
      case 1: $.ajax({ 
         type: "POST", 
         url: "url", 
         data: SoapRequest2, 
         contentType: "text/xml", 
         complete: storeData2 
        }); break; 
      case 2: $.ajax({ 
         type: "POST", 
         url: "url", 
         data: SoapRequest3, 
         contentType: "text/xml", 
         complete: storeData3 
        }); break; 
      } 
     }  
     //start ajaxQueue 
     ajaxQueue(0); 

     function storeData1(xmlHttpRequest, status) 
     {           
       updateData1(xmlHttpRequest.responseXML); 
       ajaxQueue(1);   
     } 

     function storeData2(xmlHttpRequest, status) 
     { 
       updateData2(xmlHttpRequest.responseXML); 
       ajaxQueue(2); 
     } 

     function storeData3(xmlHttpRequest, status) 
     { 
       updateData3(xmlHttpRequest.responseXML); 

     } 

現在我有以下問題:如果在執行功能時,只有第一種情況下返回從Web服務的正確XML。第二次和第三次調用導致錯誤。 (parseerror,數據爲空)。

電話是跨域,這是由supressed:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 

如果我添加異步:假給每個呼叫,所有的人都正確執行。 如果我改變了調用的順序,總是第一個正確執行。

任何人都可以幫我這個嗎?或告訴我如果你需要更多的信息。

謝謝!

+0

'解析錯誤,數據是null'>不'SoapRequest2傳遞給'$ .ajax'時''和'SoapRequest3' null? –

回答

0

嗯,如果我是鏈接ajax調用,我會把第二個調用放在第一個調用成功處理程序或一些變化。 (當AJAX請求完成後調用的東西)

$.ajax({ 
    url: 'blah.com', 
    success: function(result) { 
     $.ajax({ 
     url: 'blah.com', 
     success: function(result) { 
      // now in second leg of the chain. 
      // you can keep going like this forever. 

     } 
     }); 
    } 
}); 
0

使用回調,它作爲參數傳遞到您的隊列:

function ajaxQueue(step, callback) { 
     switch(step) { 
     case 0: $.ajax({ 
        type: "POST", 
        url: "url", 
        data: SoapRequest1, 
        contentType: "text/xml", 
        complete: callback       
       }); break; 
     case 1: $.ajax({ 
        type: "POST", 
        url: "url", 
        data: SoapRequest2, 
        contentType: "text/xml", 
        complete: callback 
       }); break; 
     case 2: $.ajax({ 
        type: "POST", 
        url: "url", 
        data: SoapRequest3, 
        contentType: "text/xml", 
        complete: callback 
       }); break; 
     } 
    }  

    //start ajaxQueue 
    ajaxQueue(0, function() { 
     // do something when ajaxQueue(0) has returned from AJAX call 
    }); 

    function storeData1(xmlHttpRequest, status) 
    {   
     // passes updateData1 as a callback, automatically passes params from AJAX call             
     ajaxQueue(1, updateData1);   
    } 
+0

感謝您的回答。我試過這個,但仍然第二和第三POST不返回任何數據... – Olga

+0

在函數的頂部放置一個調試語句來檢查'step',並且在每次AJAX調用之前檢查'SoapRequestX ' – Terry