我正在使用REST服务生成我想提示用户下载的CSV文件。该服务的一个例子如下:
https://localhost:8444/websvc/exportCSV?viewId=93282392
要提示用户下载文件,我使用以下代码:
window.location.href = exportUrl
,其中exportUrl
将是上述网址。
如果在执行服务时服务器上没有错误,这很有用。出现文件下载提示,页面不刷新,一切正常。
但是,如果 出现错误,我会收到一个讨厌的HTTP Status 500页面,这对用户体验没有好处。我想做的是在结果页面上捕获任何错误,并在不离开当前页面的情况下抛出更友好的错误。我试过了:
try {
window.location.href = exportUrl;
}
catch (e) {
alert(e);
}
但这似乎并没有改变行为。有没有人对如何处理这个有任何想法?
非常感谢。
答案 0 :(得分:6)
捕获这样的错误只会捕获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获取数据,通过base64encode
构建数据网址,然后将window.location.href
设置为该数据网址。
通过这样做,您还可以确保Ajax没有返回500并且您获得了响应期望的数据。
希望这有帮助!