Meg*_*att 14 javascript error-handling try-catch window.location
我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有改变行为.有没有人对如何处理这个有任何想法?
非常感谢.
捕获这样的错误只会捕获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);
Run Code Online (Sandbox Code Playgroud)
这将对URL执行HEAD请求,以确保没有令人讨厌的服务器错误等待.
当然,如果在实际生成CSV的过程中,您的服务器会抛出错误 - 它仍然会返回500.
一种更健壮的方法是通过Ajax获取数据,通过构建数据URL base64encode然后设置window.location.href为该数据URL.
通过这样做,您还可以确保Ajax没有返回500,并且您获得了响应中预期的数据.
希望这可以帮助!