2012-01-10 7 views
2

次のJavaScriptコードでは、いくつかの値を照会するためにFastCGIモジュールに対してAJAX呼び出しを繰り返し行います。ある時点で、は、ケースの変数が0ではなく、div1に入る値を含み、div1に入る値がdiv2になると終了します。jQuery parallel AJAX呼び出しが戻り値を混ぜる

私はChromium Browser(14.0.835.202(Developer Build 103287 Linux)Ubuntu 10.10)を使用していますが、FireFoxでも発生します。 XMLHttpRequestオブジェクトだけを使ってみましたが、同じ結果が得られました。

これはどのようにして解決できますか?

function TimerEvent() { 
    $.ajax({ 
     url: "/cgi-bin/wvvar.cgi", 
     type: "POST", 
     data: "cmd=get&[email protected]", 
     success: function(data) { 
      document.getElementById("div1").innerHTML = data; 
     } 
    }); 

    $.ajax({ 
     url: "/cgi-bin/wvvar.cgi", 
     type: "POST", 
     data: "cmd=get&[email protected]", 
     success: function(data) { 
      document.getElementById("div2").innerHTML = data; 
      if (data == "0") 
       setTimeout("TimerEvent()", 50); 
     } 
    }); 
} 
+2

ajaxリクエストは、必ずしも順番に完了するとは限りません。競争条件があるかもしれません。 –

+0

私はAjaxの配列を決める以外の解決策が必要だと思います。私は一度同じ問題を抱え、Google Closure Libraryの['XhrIoPool'](https://closure-library.googlecode.com/svn/docs/class_goog_net_XhrIoPool.html)を使って解決しましたが、私はそのライブラリを使用しました。たぶん、ソースコードを見てみると助かります。 –

答えて

2

たぶん彼らはシーケンシャル持って試してみてください。

function TimerEvent() { 
$.ajax({ 
    url: "/cgi-bin/wvvar.cgi", 
    type: "POST", 
    data: "cmd=get&[email protected]", 
    success: function(data) { 
     document.getElementById("div1").innerHTML = data; 
     $.ajax({ 
      url: "/cgi-bin/wvvar.cgi", 
      type: "POST", 
      data: "cmd=get&[email protected]", 
      success: function(data) { 
       document.getElementById("div2").innerHTML = data; 
       if (data == "0") 
        setTimeout("TimerEvent()", 50); 
      } 
     }); 
    } 
}); 

} 
+0

+1 37秒で私を打つ! – techfoobar

+0

私は、遅延オブジェクトを使用するときれいだと言うでしょう: '$ .ajax(...)。pipe(function(){$ .ajax(...)})' –

1

要件が許す場合は、これを試してみてください。

function TimerEvent() { 

$.ajax({ 
    url: "/cgi-bin/wvvar.cgi", 
    type: "POST", 
    data: "cmd=get&[email protected]", 
    success: function(data) { 
     document.getElementById("div1").innerHTML = data; 

     $.ajax({ 
      url: "/cgi-bin/wvvar.cgi", 
      type: "POST", 
      data: "cmd=get&[email protected]", 
      success: function(data) { 
       document.getElementById("div2").innerHTML = data; 
       if (data == "0") 
        setTimeout("TimerEvent()", 50); 
      } 
     }); 
    } 
}); 

} 
0

async=falseオプションを追加することにより、同期呼び出しを実行するようにしてください。

関連する問題