時々社内ニートのメモ 目指せ非プログラマー

案件がない時は社内ニートなだけだよ (もう何でもごじゃれ c, c++, c#, VB, java, php, javascript, sql, html, css 他)

jQuery.upload.js でずっと応答が返ってこないときの対応

この前こんなのを書きました。

IE8も対応? jquery.upload.js(jQueryプラグイン)でのエラー対策

 

これだけではダメだったようで、javascriptを取得した後にネットワークが切断された際。

jquery.upload.jsに渡しているCallBackが実行されません。ずっと・・・

 

なぜかというとjquery.upload.js内でjQueryの.load()をやっているためでした。

こいつはtimeoutがなくて、値が取得できるまで一生(!?)待ち続けます。

 

そこで対策としては

jquery.upload.jsの

iframe.load(function()

っていう行の上に

 

var loadTimeout = setTimeout(function(){

}, timeout);

 

こいつを追加します。(timeout はタイムアウト時間、適当に設定してやって)

 

そして、こいつの中にエラー処理を追加してやります。

また、先ほどの

iframe.load(function(){

    clearTimeout(loadTimeout);

    /*省略*/

});

って感じで1行追加しておいてやるのを忘れずに!

 

私は、

var loadTimeout = setTimeout(function(){

    var data = null;

 

    form.after(self).remove();

    checkbox.removeAttr('checked');

    checked.attr('checked', true);

    if (inputs) {

        inputs.remove();

    }

 

    setTimeout(function() {

        iframe.remove();

        if (callback) {

            callback.call(self, data);

        }

    }, 0);

}, timeout);

ってな感じで書いて、上位のCallBack内でエラー処理をしています。

ホントはdataになにかしらのデータを突っ込んだ方がよいのでしょうかね。

 

なにげに.remove()は重要な気がします。

ちなみに.remove()はその用を削除すると同時にイベントも消すという素晴らしい機能を持っているようです。

 

今回はjquery.upload.jsってよりも、「jQueryの.load()にtimeout処理を追加する」って言った方がいいかもしれませんね。