从服务器捕获“已取消”事件

时间:2013-04-23 20:47:29

标签: java javascript spring-roo

我有一个非常愚蠢的页面,它使用Java作为服务器。该页面当前允许用户上传excel文件,服务器通过它解析。

现在的诀窍是,当文件中存在错误(无效的数据类型等)时,我正在重新创建一个excel文件,突出显示错误行并将其返回给浏览器。

如果错误大于一行(例如,如果他们上传非excel文件),我会将它们重定向到“您的不良”页面。

问题是,我希望在上传和处理文件时为用户提供一个简单的加载微调器。我已经尝试了几个jQuery插件,但是当返回文件时,javascript没有捕获任何内容。 chrome调试器的网络选项卡显示POST被“取消”。我认为这是因为我的服务器没有返回重定向,它返回一个文档:

if (hasErrors) {
    log.debug("Errors were found, returning workbook");
    try {
        response.setHeader("Content-disposition", "attachment; filename=errorBook.xlsx");
        ServletOutputStream outputStream = response.getOutputStream();
        errorBook.write(outputStream);
        outputStream.flush();
        return null;
    } catch (Exception e) {
        log.error("Unable to write to the output stream", e);
    }
}
log.debug("No errors found in workbook upload");
return "redirect:/uploadfiles/" + encodeUrlPathSegment(uf.getId().toString(), httpServletRequest);

我正在使用SpringRoo作为我的服务器端,它使用的是瓷砖等。当我返回文件时,请注意“返回null”。我无法返回任何内容,因为它抱怨输出流已经被写入。

还有其他人有这样的问题吗?这是一个奇怪的情况吗?有没有办法让javascript抓住“服务器已取消表单帖子”?

编辑:这是我现在使用的jQuery。自我最初发布以来,情况发生了变化,但问题仍然存在。我现在正在使用fileupload插件,并发现当我强制使用iFrame时,文件会下载,但不会调用done / fail / always回调函数。

$("#uploadFile").fileupload({
    forceIframeTransport : true
})
    .bind("fileuploadsubmit", function(e, data) {
                    console.log("submitting");
    })
    .bind("fileuploaddone", function(e, data) {
        console.log("success!");
    })
    .bind("fileuploadfail", function(e, data) {
        console.log("Fail");
    })
    .bind("fileuploadalways", function(e, data) {
                    console.log("always");
    });

如果我删除强制iframe,则会触发回调,但不会下载文档。实际上,在这种情况下,数据包含一个文件对象的字符串(只是一小部分字节)。

0 个答案:

没有答案