2011-01-20 7 views
0

私はjsonと2つのajax呼び出しを持っています。 最初はglobalVarの値を取得するのに役立ちます。 2番目の値はこの値をとり、リモートURLの引数に渡してから結果を返します。jQuery同期の問題

var globalVar = ""; 

var firstRemoteUrl = "http://example.com/some/json"; 
     $.ajax({ 
      type: "GET", 
      url: firstRemoteUrl , 
      dataType: 'jsonp', 
      success: function (data) { 
       globalVar = data; 
      } 
     }); 


var secondRemoteUrl = "http://example.com/another/json?var = " + globalVar; 
     $.ajax({ 
      type: "GET", 
      url: secondRemoteUrl , 
      dataType: 'jsonp', 
      success: function (data) { 
       alert(data); 
      } 
     }); 

このような種類の呼び出しの問題は、2番目のajax呼び出しが、最初の呼び出しが完了するまで待たないということです。 時々、globalVarは空です。したがって、2番目のコールは正常に終了しません。

私はasyncのset ti falseを試しましたが、jqueryのドキュメントに示されているように、jsonpデータ型は同期呼び出しを無視します。

この問題のワーキングルームはありますか?

ありがとう、

よろしく。

+0

私は "待つ" 追加することにより、別のworkarroundが見つかりました: 関数pausecomp(ミリ秒) { \t VAR日=新しいDate()を。 \t var curDate = null; \t do {curDate = new Date(); } \t while(curDate-date Zakaria

答えて

1

2番目の呼び出しを最初の呼び出しのコールバックに配置することができます。ちょっと面倒ですが、仕事を終わらせるべきです。このようなもの:

$.ajax({ 
type: "GET", 
url: "http://example.com/some/json", 
dataType: 'jsonp', 
success: function(data) { 
    $.ajax({ 
    type: "GET", 
    url: "http://example.com/another/json?var = " + data, 
    dataType: 'jsonp', 
    success: function(result) { 
    alert(result); 
    } 
    }); 
} 
}); 
1

最初のajax呼び出しの成功コールバック関数に2番目のajax呼び出しを配置し​​ます。

var firstRemoteUrl = "http://example.com/some/json"; 
    $.ajax({ 
     type: "GET", 
     url: firstRemoteUrl , 
     dataType: 'jsonp', 
     success: function (data) { 
      globalVar = data; 
      secondRemoteUrl = "http://example.com/another/json?var = " + globalVar; 
          $.ajax({ 
            type: "GET", 
            url: secondRemoteUrl , 
             dataType: 'jsonp', 
             success: function (data) { 
                alert(data); 
               } 
             }); 
          } 
      });