我有一个Web应用程序(MVC 5),当我从索引页面快速移动到不同页面时,我得到一个javascript警告告诉我:" localhost:4332页面说:" (它没有说什么)。
当我按下OK按钮时,evertything恢复正常,继续到另一页,我想从pop弹出到客户端禁用此警报。
我正在思考它,因为我移动到另一个页面太快而且脚本无法完全运行。
我在脚本中做的是使用从Ajax post请求获得的值初始化下拉列表。 (为了节省加载页面时间的时间,我加载页面,然后初始化下拉列表。
这是我的代码:
$(document).ready(function () {
$.ajax({
type: 'POST',
url: '/Home/GetProfiles',
success: function (data) {
$.each(data, function (key, value) {
$('#filterSelect').append($("<option></option>").attr("value", value).text(key));
});
},
error: function (ts) { alert(ts.responseText) }
});
})
我还做了一些事情,但我不想让我在这里发布的代码复杂化,我认为问题与这行代码有关。
我尝试添加&#34;尝试&#34;并且&#34;赶上&#34;使用console.log的异常,但我没有得到任何控制台,警报保持弹出
知道为什么会这样吗?我该如何解决?
答案 0 :(得分:2)
您收到消息是因为浏览页面会取消任何AJAX请求,因此它们会出错。您有一个显示onerror
的{{1}}回调,由于错误,因此无法显示任何文字。
答案 1 :(得分:0)
@Andrea Faulds是对的。发生这种情况是因为页面内容在ajax调用完成之前发生了变化。当您在ajax调用完成之前快速导航到另一个页面或重新加载当前页面时,可能会发生这种情况。
要获得适当的修复,请参阅以下网址:handle ajax error when a user clicks refresh
总而言之,很多人都这样做:
error: function (ts) {
if (ts.readyState == 0 || ts.status == 0) return;
alert(ts.responseText);
}
但是,这也可以抑制实际错误。例如,如果您开始ajax请求,然后禁用网络连接,则可能永远不会看到alert
消息(因为在这些情况下,readyState
和status
也为零)。
另一种可能的解决方案是让你做这样的事情:
error: function (ts) {
alert(ts.responseText || 'An asynchronous request was unable to complete.');
}
在这种情况下,通过使用||
运算符,当ajax调用完成之前页面内容发生更改时,您的用户仍会看到警报。但是,警报不会为空,因为当它出现时,将显示另一条消息。