21

我正在使用 REST 服务来生成我想提示用户下载的 CSV 文件。服务示例如下:

https://localhost:8444/websvc/exportCSV?viewId=93282392

为了提示用户下载文件,我使用以下代码:

window.location.href = exportUrl,exportUrl上面的 URL 会在哪里。

如果在执行服务时服务器上没有错误,这将非常有用。出现文件下载提示,页面不刷新,一切正常。

但是,如果出现错误,我会得到一个讨厌的 HTTP 状态 500 页面,这不利于用户体验我想做的是在结果页面上捕获任何错误,并在不离开当前页面的情况下抛出一个更友好的错误。我试过:

try {
    window.location.href = exportUrl;
}
catch (e) {
    alert(e);
}

但这似乎根本没有改变行为。有没有人对如何处理这个有任何想法?

非常感谢。

4

1 回答 1

11

捕获这样的错误只会捕获 JavaScript 错误。这不是你在这里所经历的。您的服务器正在返回状态代码500. 在将用户发送到那里之前,您需要确保一切正常。

为此,您可以使用 Ajax 有效地“ping”该 URL,以确保它不会返回 500 错误。

类似于以下内容:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    if(xhr.readyState == 4 && xhr.status == 200) {
        window.location.href = exportUrl;
    }
}

xhr.open('head',exportUrl);
xhr.send(null);

这将对 URL 发出 HEAD 请求,以确保没有令人讨厌的服务器错误等待。

当然,如果在实际生成 CSV 的过程中,您的服务器抛出错误 - 它仍然会返回 500。

一种更强大的方法是通过 Ajax 获取数据,通过构建数据 URL base64encode,然后设置window.location.href为该数据 URL。

通过这样做,您还可以确保 Ajax 没有返回 500 并且您在响应中获得了您期望的数据。

希望这可以帮助!

于 2013-09-19T16:19:40.587 回答