0

私はこのように動作するJavaScriptアプリケーションを持っています:

  • ファイルをアップロードし、アップロードされたファイルIDを応答として受け取ります
    これはBlueImpアップローダーを使用して行われます
  • ファイルIDを使用して、後続のリクエストでファイルを参照します。この場合、アップロードされたファイルのプレビューを受信します。

これは、ファイルアップロードの「完了」ハンドラーのコードです。もともとはCoffeeScript(http://pastebin.com/708Cf9tu)で書かれています。

var completeHandler = function(e, data) {
    var url;
    if (data.textStatus !== 'success') {
        alert("Noe gikk galt. Debug informasjon er logget i konsollen");
        console.group('Upload failure');
        console.error(data.textStatus);
        console.error(data.result);
        console.groupEnd('Upload failure');
        selectButton.removeClass('disabled');
        uploadButton.removeClass('disabled loading');
        uploadButton.html('Last opp');
        return;
    }
    self.fileUploadResponse = data.result;
    url = "" + config.api_root + "/" + config.api_path_tabulardatafilepreview;
    return $.ajax(url, {
        type: 'POST',
        dataType: 'json',
        async: false,
        data: {
            'file_handle': data.result.file_handle,
            'rownum': 5
        },
        complete: function(req, text_status) {
            if (text_status !== 'success') {
                alert("Noe gikk galt. Debug informasjon er logget " + "i konsollen");
                console.group('Failed to receive data file preview');
                console.log(text_status);
                console.log(req.responseText);
                console.log(req);
                console.groupEnd('Failed to receive data file preview');
                selectButton.removeClass('disabled');
                uploadButton.removeClass('disabled loading');
                uploadButton.html('Last opp');
            }
            self.previewData = JSON.parse(req.responseText);
            return self.setStage(2);
        }
    });
};

これはFireFoxで見事に機能しますが、Chromeでは2番目のjQueryAjaxリクエストでエラーが発生し始めました。ステータスが「error」、responseTextがなく、statusTextが「Error:NETWORK_ERR:XMLHttpRequestException101」に設定された状態で返されるようになりました。これはすべての場合に起こるわけではありませんが。アップロードされたファイルは問題とは関係がないようです。10KBのcsvファイルは機能し、120KBのxlsxファイルは失敗しますが、1.2MBのxlsxは機能します。さらに、失敗するのは2番目のAjaxリクエストであり、サーバーに2つの小さな整数を送信する以外は何もしません。なぜ失敗するのですか!?

また、これは今日始まったばかりです。知っていることは何も変更しておらず、Chromeも更新していません。

Chromeがこれを行っている理由について誰かが手がかりを持っていますか?以前のAjaxリクエストの完全なハンドラーで起動されたAjaxリクエストと何か関係がありますか?

私がこれを解決するのを助けることができるどんな推測にも感謝します

4

1 に答える 1

0

Ajaxイベントハンドラー内で長いプロセスを開始するのは悪い考えであることがわかりました。私の場合、イベントハンドラーで新しい同期Ajaxリクエストを開始するのは間違いでした。それ以来、両方のリクエストを非同期にし、コードをきちんとした関数に分割しました。例外に悩まされることはもうありません。

于 2012-05-16T10:39:45.140 に答える