我必须进行ajax调用并根据响应决定是否离开页面。这是我到目前为止所尝试的内容。
window.onbeforeunload = function(e) {
$.when($.ajax({
url: checkUrl,
async: false,
type: 'GET',
})).then(function(data, textStatus, jqXHR){
if(data===false)
return "Appointment not created yet. Do you wish to leave?";
else
return false;
});}
当我使用调试器检查控制流时,似乎要等到数据返回但是它不会显示警告框。
我不确定我做错了什么。我知道有类似的问题,但找不到解决方案。帮我找到一种方法让它发挥作用
答案 0 :(得分:0)
您没有从onbeforeunload
函数返回字符串。您是从then
回调中返回的。
您需要设置一个用于从主函数返回的变量:
window.onbeforeunload = function(e) {
var result = undefined;
$.when($.ajax({
url: checkUrl,
async: false,
type: 'GET',
})).then(function(data, textStatus, jqXHR){
if(data===false) {
result = "Appointment not created yet. Do you wish to leave?";
}
});
return result;
};
旁注:不需要$.when
,您可以直接使用$.ajax
返回的“承诺”:
window.onbeforeunload = function(e) {
var result = undefined;
$.ajax({
url: checkUrl,
async: false,
type: 'GET',
}).then(function(data, textStatus, jqXHR){
if(data===false) {
result = "Appointment not created yet. Do you wish to leave?";
}
});
return result;
};
附注2:此处插入通常的注释,说明同步ajax如何阻止浏览器的UI。如果您正在进行约会创建,当然可以在开始创建时设置客户端变量,然后在完成后清除它,并使用它来知道是否显示消息?
附注3:现代浏览器会忽略您返回的消息,只显示通用内容。我不是说你应该改变任何东西(因为现在还有一些东西可以显示),只是提到它所以你不要试图找出你收到消息的原因,但不是你的消息。
附注4:您的then
回调只会收到一个参数。您列出的三个参数是传递给success
回调的参数,而不是then
回调。