onbeforeunload 在 ajax 调用中不使用 return 字符串
onbeforeunload doesn't take return string within a ajax call
我必须进行 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;
});}
当我使用调试器检查控制流时,似乎要等到数据返回,但不会显示警告框。
我不确定我做错了什么。我知道有类似的问题,但找不到解决方案。帮我想办法让它工作
您没有 return 从 onbeforeunload
函数中获取字符串。您正在 return 从 then
回调中获取它。
您需要在主函数中设置一个用于 return 的变量:
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
编辑的 "promise" return:
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:现代浏览器会忽略您 return 的消息,只显示一些通用的内容。我并不是说你应该改变任何东西(因为现在还有一些显示它),只是提到它所以你不会发疯试图弄清楚为什么你会收到一条消息,但不是 你的留言。
旁注 4:您的 then
回调只会接收一个参数。您列出的三个参数是传递给 success
回调的参数,而不是 then
回调。
我必须进行 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;
});}
当我使用调试器检查控制流时,似乎要等到数据返回,但不会显示警告框。
我不确定我做错了什么。我知道有类似的问题,但找不到解决方案。帮我想办法让它工作
您没有 return 从 onbeforeunload
函数中获取字符串。您正在 return 从 then
回调中获取它。
您需要在主函数中设置一个用于 return 的变量:
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
编辑的 "promise" return:
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:现代浏览器会忽略您 return 的消息,只显示一些通用的内容。我并不是说你应该改变任何东西(因为现在还有一些显示它),只是提到它所以你不会发疯试图弄清楚为什么你会收到一条消息,但不是 你的留言。
旁注 4:您的 then
回调只会接收一个参数。您列出的三个参数是传递给 success
回调的参数,而不是 then
回调。