2011-10-28 9 views
1

私はAJAX POST関数を持っています。私は成功したコールバックを取得し、次に関数を実行したい。私はopenWindow()$.whensuccess

var url = '/echo/html/'; 
var json_text = ' '; 
var FireOrderCounter = 0; 

$.when(
     $.ajax({ 
     type: 'POST', 
     url: url, 
     data: json_text, 
     success: function() { 
      FireOrderCounter++; 
      alert('successfully completed Action ' + FireOrderCounter); 

      var millisecondsToWait = 5000; 
      setTimeout(function() { 
       FireOrderCounter++; 
       alert('Done Spinnin ' + FireOrderCounter); 
      }, millisecondsToWait); 


     }, 
     dataType: 'html' 
    }) 
).then(openWindow()); 


function openWindow() { 
    FireOrderCounter++; 
    alert('opened window' + FireOrderCounter); 
} 

followsとしてコールバック火災でこれを達成することを選びました。これは、 $.ajaxが何らかの形で延期されておらず、 $.whenがAPIに記載されているように単純にであることを意味しますか?

単一引数がjQuery.whenに渡され、それが遅延 ない場合、これは簡略化されたテストケースで解決

として扱われます。プロダクションコードも同様に失敗します。すべてのデータを取得するには、このイベントを2回実行する必要があります。競合状態があります。

処理を停止するためにブレークポイントを挿入できます。私はまだデバッガを持っている間、ファンクションが起動します。だから、成功コールバックを待っていません。短いタイムアウト(約10秒後に発生)?これをどうすれば解決できますか?

答えて

4

あなたの次の声明は.then(function(){openWindow()});または.then(openWindow)だと思います。 with()を渡すと、関数が実行されます。

+0

+1これはテストケースを修正します。匿名関数を追加した後も、私はまだプロダクションバージョンに競合条件があります。データの〜20%しかレポートに反映されません。 –

+0

私のコードはデバッガを待っています。なぜ私はレポートのすべてのデータを取得していないのか分からないが、無関係なものが間違っていると思う。 –

関連する問題