0

我有一个像这样工作的 JavaScript 应用程序:

  • 上传文件,接收上传的文件 ID 作为响应
    这是使用 BlueImp 上传器完成的
  • 使用文件 ID 在后续请求中引用文件,在这种情况下接收上传文件的预览。

这是文件上传“完成”处理程序的代码。它最初是用 Coffee Script ( 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 中,我刚开始在第二个 jQuery Ajax 请求中遇到错误。它现在返回状态“错误”,没有 responseText,并且 statusText 设置为“错误:NETWORK_ERR:XMLHttpRequest Exception 101”。尽管并非在所有情况下都会发生这种情况。上传的文件似乎与问题无关,因为10KB的csv 文件有效,120KB的xlsx 文件失败,但1.2MB的xlsx 有效。此外,这是第二个失败的 Ajax 请求,它除了向服务器发送两个小整数之外什么也不做。为什么会失败!?

这也是今天才开始发生的。我没有更改我所知道的任何内容,也没有更新 Chrome。

有没有人知道为什么 Chrome 会这样做?它与在先前 Ajax 请求的完整处理程序中启动的 Ajax 请求有什么关系吗?

感谢任何可以帮助我解决这个问题的猜测

4

1 回答 1

0

事实证明,在 Ajax 事件处理程序中启动冗长的进程是个坏主意。在我的例子中,在事件处理程序中启动一个新的同步 Ajax 请求是错误的。从那以后,我将两个请求都设为异步,并将代码分成简洁的函数,我不再为异常所困扰。

于 2012-05-16T10:39:45.140 回答