卸载时同步跨域ajax DELETE请求

时间:2015-09-09 18:40:58

标签: javascript jquery ajax browser

我正在使用需要锁定的跨域远程资源。 CORs头文件设置正确。

我正在尝试解决当浏览器窗口关闭时客户端没有释放资源(在锁定到期之前保持锁定状态)的情况。

我原本希望在窗口卸载时发送同步DELETE请求。我正在使用jquery(如果需要,答案可以是普通的javascript ...提及上下文的jquery)并注意到他们的文档说“跨域请求......不支持同步操作”,我变得非常难过。

是否可以制作同步跨域ajax请求?由于旧版浏览器导致jquery限制吗?我读过的所有内容都表明卸载事件监听器不会长时间足以让ajax调用完成,如果它是异步的,并建议使用同步请求进行这种类型的清理。不幸的是,这个电话是跨域的...我该怎么办?

修改

所以我很好奇我是否在本地开发期间(即客户端在127.0.0.1:8080和api在127.0.0.1:8081)获得幸运,或者jquery文档只是误导。接下来是否会导致我遇到问题?

这似乎适用于Chrome45:

var unload_event = "unload." + lock.id

function release_lock(sync) {
    $.ajax({
        method: "DELETE",
        async: !sync,
        data: lock,
        url: lock.url,
        error: function(){
            console.log("failed to release lock " + JSON.stringify(lock));
        },
        success: function(){
            console.log("lock " + lock.id + " released");
            lock = null;
            $(window).off(unload_event);
        }
    });
}

$(window).on(unload_event, function(){
    release_lock(true);
});

它确实在控制台中生成以下警告:

Synchronous XMLHttpRequest on the main thread is deprecated because of
its detrimental effects to the end user's experience.
For more help, check http://xhr.spec.whatwg.org/.

0 个答案:

没有答案