1

私はJqueryJSONPの2つの呼び出しを下回っています。これはクロスドメイン呼び出し用です。ページが読み込まれると、これらの2つの呼び出しが発生します。問題は、呼び出しが非常に高速で、高速が完了する前に2番目の呼び出しが発生することです。 2回目の呼び出しでパーサーエラーが発生します(airxml:は関数ではありません)。

以下のコードは、呼び出しでasync:falseを取得した場合に正常に機能しますが、クロスドメインポリシーに従って、同期呼び出しをサポートしていません。

var oXMLHTTP, i, length, oData, sValue, sDisplay, sName, sMatch, oRegExp;
     var qr = "&jsonpcall=true";
   if (!oDropdown)
        return;

    oXMLHTTP = this.createXMLHttpRequest();
    this.FilterUrl = sFilterUrl;
    if (sFilterUrl != previousFilterUrl)
    {

        var regUrl = sFilterUrl;               
        var regquest = $.ajax({
            url: regUrl+qr,  
            type: "GET",
            async: false,   
            cache: true,                            
            contentType: "application/json; charset=utf-8",
            dataType: "jsonp",
            jsonpCallback: "airport",                 
            success: function(data, textStatus, jqXHR) 
            {                
                if (data.result[0] != '')
                {
                        sFilterData = data.result[0];                   
                }          
            }
            }); 
        previousFilterUrl = sFilterUrl;
    }

    if(!fireRequestOnce ||(fireRequestOnce && retrievedData == null))
    {       
         var regUrl = sXML;  
         var airquest = $.ajax({
            url: regUrl+qr, 
            async: false,                 
            dataType: 'jsonp',
            jsonpCallback: 'airxml',            
            cache: true,
            success: function(data, textStatus, jqXHR) 
            {
                    var xmlDoc = $.parseXML(data.myresult);
                oData = xmlDoc.documentElement.childNodes;
            }
        });
    }

最善のアプローチを提案してください。成功イベントが発生した後に変数を配置してから、2番目の呼び出しを呼び出そうとしましたが、機能しませんでした。

4

1 に答える 1

0

順次AJAX呼び出しが必要な場合は、async:falseまたはjQuery.ajaxSetup({async:false});これらのオプションの機能を回避してください。AJAX呼び出しが完了するまでブラウザーがロックされます。このタイプの状況では、 gnarfによるajaxQueueプラグインを好みます。

このプラグインが行うことは、すべての着信AJAXリクエストをキューに入れ、次々に処理することです。ここに示すように、使用は非常に簡単です。

于 2012-05-24T06:26:26.977 に答える