1

WebサービスへのjQuery AJAX呼び出しを使用しています。呼び出しは連鎖する必要があります。https://stackoverflow.com/a/995648/296575のソリューションに基づいて、AJAX キューを作成しました。

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 を返します。2 番目と 3 番目の呼び出しでエラーが発生します。(解析エラー、データが null です)。

呼び出しはクロスドメインであり、次によって抑制されます。

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

各呼び出しに async:false を追加すると、すべてが正しく実行されます。呼び出しの順序を変更すると、常に最初の呼び出しが正しく実行されます。

誰でもこれで私を助けることができますか?または、さらに情報が必要な場合は教えてください。

ありがとうございました!

4

2 に答える 2

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);           
    }
于 2012-06-12T18:55:44.760 に答える
0

うーん、もし私が ajax 呼び出しを連鎖させていたら、最初の呼び出しの成功ハンドラーまたはそのバリエーションの中に 2 番目の呼び出しを入れるだけでした。

$.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.

         }
      } );
   }
} );
于 2012-06-12T17:52:49.327 に答える