Javascript 即使在页面重定向之后,ajax调用还会结束吗?

Javascript 即使在页面重定向之后,ajax调用还会结束吗?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我正在尝试为本地图像创建一个临时图像url,并将其发送到谷歌进行图像搜索。我不希望图像url是永久的,所以我想在使用后立即删除它。我的代码如下: // Gets a URL that can be used to do a search by image through Google. function getImageURL() { var xml = new XMLHttpRequest(); xml.onreadystatechange = function () {

我正在尝试为本地图像创建一个临时图像url,并将其发送到谷歌进行图像搜索。我不希望图像url是永久的,所以我想在使用后立即删除它。我的代码如下:

// Gets a URL that can be used to do a search by image through Google.
function getImageURL() {
    var xml = new XMLHttpRequest();
    xml.onreadystatechange = function () {
        if (xml.readyState == 4 && xml.status == 200) {
            deleteImageURL(); // asynchronous call to server to delete the URL
            window.location.href = 
                "https://www.google.com/searchbyimage?site=search&sa=X&image_url=" 
                + xml.responseText; // the image url
        }
    }
    xml.open("GET", "REST_ENDPOINT", true);
    xml.send();
}
上面的函数调用服务器,完成后将删除url并重定向页面。函数“deleteImageURL()”是另一个异步完成的ajax调用。目前,这会很好地加载google页面,因为图像URL在重定向发生时没有删除URL

我的问题是:deleteImageURL()会在页面重定向后完成删除图像URL吗?还是会停止(因此,永远不会删除URL)

编辑:所以我在想你们对比赛条件的看法,并尝试了以下代码:

// Gets a URL that can be used to do a search by image through Google.
function getImageURL() {
    var xml = new XMLHttpRequest();
    xml.onreadystatechange = function () {
        if (xml.readyState == 4 && xml.status == 200) {
            deleteImageURL(xml.responseText);
        }
    }
    xml.open("GET", "REST_ENDPOINT"
        + id + "/public_url", true);
    xml.send();
}

// Deletes the url for the image.
function deleteImageURL(imageURL) {
    var xml = new XMLHttpRequest();
    xml.open("GET", "REST_ENDPOINT_FOR_DELETE", true);
    xml.send();
    window.location.href = 
            "https://www.google.com/searchbyimage?site=search&sa=X&image_url="
            + imageURL;
}
这段代码在我每次运行时都有效。我认为仍然可能存在比赛条件,但到目前为止似乎效果良好

再次感谢。

如果
删除图像URL()包含一个异步调用,您应该在调用完成时执行重定向。当调用是同步的时,代码将起作用。我们没有看到
deleteMageURL()的源代码可以更具体一些,但是您应该像对
getImageURL()

所做的那样,即使在页面重定向之后,“deleteMageUrl()”也会完成删除图像URL的操作。。
请参阅:

服务器不会停止处理请求(由deleteImageUrl启动),但如果在操作完成之前在浏览器中卸载当前页面,则您将无法处理回调。

这取决于具体情况。有时可能足够快,但有时可能不够快。我希望它在大多数现代机器上速度不够快。你的重定向应该等到Ajax调用返回。你应该有一个后端“垃圾收集器”。例如,每隔一小时左右自动执行一个脚本,删除早于X分钟的URL。不要依赖客户来做这件事。将其保留在服务器端取决于浏览器如何/何时开始加载新url,何时关闭包含ajax代码的页面,以及服务器多长时间注意到ajax连接已终止。e、 g.这是一个完全竞争条件。可能会在下一条语句(window.location.href)之前重复请求,因此不会因为以下重定向而忽略服务器请求的风险?还是我误解了这个问题?这个家伙指定deleteImageURL()包含另一个异步调用。。。所以这个调用必须完成,然后
oncomplete
进行重定向,因为否则重定向将立即执行,异步调用将无法完成。。。这取决于时间…有时这个电话可能会被执行太棒了,我也是这么想的。非常感谢。但是,如果重定向发生在服务器完成接收删除映像的请求之前,它将被中止。