我目前有一个页面,可将数据从表单发布到PHP文件。
function save(){
// Serialize the data in the form
current = $form.serialize();
// Fire off the request to /form.php
request = $.ajax({
url: "save.php",
type: "post",
data: current,
});
// Callback handler that will be called on success
request.done(function (response, textStatus, jqXHR) {
console.log('saved');
});
// Callback handler that will be called on failure
request.fail(function (jqXHR, textStatus, errorThrown) {
console.error(
"The following error occurred: " +
textStatus, errorThrown
);
});
}
每15秒触发一次,效果很好。但是,为了在人们离开页面之前捕获任何更改,我目前还在beforeunload
$(window).bind('beforeunload', function(){
save();
});
再次在测试环境中的localhost上运行良好。但是,我担心如果save.php页面不可用或加载时间太长,用户将被保留在原始页面上而无法离开(通过将PHP文件休眠30 s确认的行为)。
我认为我需要使用$ .ajax超时选项来处理这种情况,但是我遇到了困难:
request = $.ajax({
url: "save.php",
type: "post",
data: current,
timeout: 6000
});
这会在调用request.fail时在控制台中记录超时-但是页面仍在等待PHP文件休眠的整整30秒钟。
我希望页面在6秒后按照用户最初的期望重定向或关闭,即使保存尚未完成。我尝试在abort()
和request
上同时使用jqXHR
,但效果不佳。我在做什么错了?