0

次のような jQuery ajax コードを使用しています。

$.each(url_id, function(index, value) {
        $.ajax({
            async: false,
            type: "POST",
            url: "webservices/insert-manual.php",
            data: { url_id: value},
            dataType: "json"
        }).done(function(response){
            if(response.code == "200"){
                $("#results").append('<div class="results-list"><strong>Well done!</strong></div>');
            }else{
                $("#results").append('<div class="results-list-error"><strong>Oh snap!</strong> There is no records to update in database.</div>');
            }
        }); 
    });

このスクリプトを実行すると、mozilla アラートでこのエラー メッセージが表示されました。

A script on this page may be busy, or it may have stopped responding. You can stop the script now, or you can continue to see if the script will complete.

Script: http://localhost/jquery-project/js/jquery-1.7.2.min.js:2

Stop Scriptそして、これは私にまたはするように頼みますContinue

をクリックするStop Scriptとループが停止する$.eachか、続行をクリックするとさらにコードが実行され、しばらくすると再度尋ねられます。

私の質問は、このアラートを削除する方法です。

4

2 に答える 2

4
async: false,

これが問題の原因です。ページがロードされるまでJavaScriptをブロックします。それを除く。

これは、ブロック モードなどで、コードを同期的に実行しようとしていることを意味します。

于 2013-05-21T09:52:21.933 に答える
0

最初:できません。目的はまさに、このようなコードの副作用からユーザーを防ぐことです。

2 番目: 配列内のすべての URL を収集し、これを 1 つの ajax としてサーバーに渡し、URL ごとの応答を 1 つのバッチで収集し、それらすべてのエラー メッセージを追加します。「成功」は省略し、エラーのみを報告します (「ニュースがないのは良いニュースです」)。

ただし、リストが十分に長い場合、これでもエラーが発生する可能性があります。

ajax を async:true に設定すると、高速になる可能性がありますが、ユーザーの PC (およびおそらくサーバー...) がブロックされます。

于 2013-05-21T09:57:18.343 に答える