2012-06-12 2 views
1

Im using jQuery AJAX Позволяет веб-сервису. Вызовы должны быть прикованы. На основе решения https://stackoverflow.com/a/995648/296575 я создал очередь AJAX.Несколько прикованных jQuery AJAX POST webservice звонки

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

     } 

Теперь у меня есть следующий вопрос: если функция выполняется только первый случай возвращает правильный XML из веб-сервиса. Второй и третий вызовы приводят к ошибке. (parseerror, data - null).

Призывы перекрестно домен, который подавляются:

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

Если добавить асинхронной ложь каждому вызову, все они выполнены правильно. Если я изменяю порядок вызовов, всегда выполняется первый из них.

Может ли кто-нибудь помочь мне с этим? Или скажите мне, если вам нужна дополнительная информация.

Спасибо!

+0

'Ошибка синтаксического анализа, данные null'> не' SoapRequest2 'и' SoapRequest3' при передаче в '$ .ajax'? –

ответ

0

hmm, если бы я был цепочкой вызовов 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

Используйте обратные вызовы (что-то звонить, когда запрос AJAX закончил), передать его в качестве аргумента в очереди:

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

Спасибо за ваш ответ. Я тоже пробовал это, но все еще 2-й и 3-й POST не возвращают никаких данных ... – Olga

+0

Положите оператор отладки в верхней части функции, чтобы проверить «шаг» и в каждом случае перед вызовом AJAX проверить значение «SoapRequestX» ' – Terry

Смежные вопросы