Javascript在AJAX超时后继续执行-如何避免这种情况?

时间:2018-08-26 20:37:34

标签: jquery ajax

我目前有一个页面,可将数据从表单发布到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,但效果不佳。我在做什么错了?

0 个答案:

没有答案