0

行データの送信を処理する単純な関数があります(ループごとに1つの送信)。この関数が主に使用される目的についてはあまり詳しく説明しませんが、ここに簡単な要約を示します。ループするデータがたくさんあり、ループごとにupload()ajax関数を持つ関数を呼び出します。Ajaxはデータを投稿として送信し、成功するとinsert()、ループを継続してupload()すべてのデータが処理されるまで再度呼び出す関数を呼び出します。

upload: function( data ){
    var obj = this;
    if( data.post_code && data.post_code.length > 0 ){
        if( ajax_insert ){
            ajax_insert.abort();
        }

        try{
            ajax_insert = $.ajax({
                type    : 'POST',
                url     : '/submission/my-function?ajax',
                data    : $.param( data ),
                success : function( response ) {
                    obj.insert();
                },
                error: function(msg){
                    setInterval(function(){
                        obj.insert();
                    }, 2000);
                }
            });
        }catch(err){
            ajax_insert.abort();
            obj.insert();
        }
    }else{
        this.insert();
    }
}

一部のクライアントが経験する問題は、しばらくすると送信が停止することです(60を超えると、100を超えると送信されます)。これがインターネット接続の遅さによるものかどうかはわかりませんが、Firebugでコンソールを使用していることに気付いたのは、送信がコンソールで停止しても、Ajaxが送信を試みているが完了しないことを示していることです。また、JavaScriptエラーは表示されません。

Ajaxが送信を完了するのに時間がかかっているかどうかを確認し(ほぼ5分間スタックしているとしましょう)、を使用し.abort()て再試行する方法はありますか?

ありがとう。

4

1 に答える 1

1

あなたが使うことができます。

  timeout: 10000, //time in milliseconds. 

これは、少なくとも停止したスクリプトをキャッチします。

于 2012-05-31T10:42:02.550 に答える