1

したがって、タイトルは何が起こるかを示しています。ajax呼び出しが1つあり、成功すると別の呼び出しが送信されますが、問題は、呼び出しが完了する前に別の呼び出しが送信され、ajaxがスタックを開始することです。私は非同期を使用しておらず、サーバー言語にphpを使用しています。私のajaxには、5秒= 5000ミリ秒のタイムアウトもあります。そのため、サーバーをポーリングし、それが待機している間に、javascript が新しい ajax 呼び出しを行います。他の ajax が情報を返す前であってもです。

これは私のjquery ajax呼び出しです

 $.ajax({
                url: ("json/getfriends.php"),
                type: 'POST',
                data: {friendlist: friendsarray},
                async: false,
                timeout: 5000,  
                dataType: 'json',       
                success: function(data){                
                    $.each(data, function(i, val){
                        friendsarray.push(val);                 
                    });
                    setTimeout("friends();", 15000); //loops the ajax call

                },
                error: function(jqXHR, textStatus, errorThrown) 
                {
                    if (errorThrown['code'] == 101){
                        //time out, not data was received 
                        setTimeout("friends();", 15000); //loops the ajax call
                    }
                    else
                    {
                        console.log(errorThrown);
                    }
                }
            });

だから私の質問は、どのように ajax スタックを互いの上に停止するか、または 1 つの ajax 呼び出しをもう 1 つの呼び出しがデータを戻すときにのみ実行する方法です。

ここに画像 と余波があります

私の完全なJavaScript

4

1 に答える 1

1

結論として、あなたが示したコードは問題を示していません。

ただし、追加した完全なJavaScriptには大きな問題があります。

...
setTimeout(chat_check(), 20000);    
...

分かりますか?chat_check()成功ハンドラー内からすぐに実行されます。良い考えではありません!

これである必要があります:

setTimeout(chat_check, 20000);

関数の結果ではなく、最初の引数として関数参照を渡します。friends()あなたはあなたの呼び出しに同じことを適用したいかもしれません:

setTimeout(friends, 15000);

編集

ところで、なぜ使用しているのかわかりませんasync: falseが、リクエスト中にブラウザが応答しなくなるため、使用することはユーザーエクスペリエンスにとってあまり良くありません。

デフォルトの非同期モードの方が良いです:)

于 2012-12-15T22:15:14.413 に答える