Javascript 即使在页面重定向之后,ajax调用还会结束吗?
我正在尝试为本地图像创建一个临时图像url,并将其发送到谷歌进行图像搜索。我不希望图像url是永久的,所以我想在使用后立即删除它。我的代码如下: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 () {
// 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
进行重定向,因为否则重定向将立即执行,异步调用将无法完成。。。这取决于时间…有时这个电话可能会被执行太棒了,我也是这么想的。非常感谢。但是,如果重定向发生在服务器完成接收删除映像的请求之前,它将被中止。