Javascript 在响应准备就绪之前,如何使用xmlhttprequest发出请求?

Javascript 在响应准备就绪之前,如何使用xmlhttprequest发出请求?,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我试图向一个路由发出请求,该路由对一个API进行查询,如果API有数据,则响应是用API数据呈现另一个网站。但是,如果数据尚未准备好,因为它仍在处理中,路由将返回一个字符串“尚未完成” 我希望做的是:发出get请求,如果响应“尚未完成”,请等待5秒钟,然后再次执行请求,直到响应成为数据。之后,脚本将打开包含加载数据的新页面的窗口 以下是我已经做的: job_id = document.querySelector("#job_id").getAttribute("va

我试图向一个路由发出请求,该路由对一个API进行查询,如果API有数据,则响应是用API数据呈现另一个网站。但是,如果数据尚未准备好,因为它仍在处理中,路由将返回一个字符串“尚未完成”

我希望做的是:发出get请求,如果响应“尚未完成”,请等待5秒钟,然后再次执行请求,直到响应成为数据。之后,脚本将打开包含加载数据的新页面的窗口

以下是我已经做的:

job_id = document.querySelector("#job_id").getAttribute("value")
code = document.querySelector("#code").getAttribute("value")
​
var myRequest = new XMLHttpRequest();
​myRequest.open('GET', `http://127.0.0.1:5000/status/${job_id}/${code}`);
​myRequest.onreadystatechange = function () { 
    if (myRequest.readyState === 4 && myRequest.responseText != 'not finished yet') {
        window.location = `http://127.0.0.1:5000/status/${job_id}/${code}`
    }
};
如果有人知道它是否有效,或者知道更好的处理方法,我会感谢你的帮助

提前谢谢

解决方案:

几个小时后,我终于找到了处理它的方法。还是不知道这是不是最好的办法

function search() {
job_id = document.querySelector("#job_id").getAttribute("value")
code = document.querySelector("#code").getAttribute("value")
var myRequest = new XMLHttpRequest();
myRequest.open('GET', `http://127.0.0.1:5000/status/${job_id}/${code}`);
myRequest.send();
myRequest.onreadystatechange = function () {
    if (myRequest.readyState === 4 && myRequest.responseText === 'not finished yet') { setTimeout(function () {search();}, 5000)
   }
    else if(myRequest.readyState === 4 && myRequest.responseText != 'not finished yet')
{ window.location = `http://127.0.0.1:5000/status/${job_id}/${code}`}}
}
search()

我使用
var选项={}作为处理OOP(面向对象编程)的全局对象

您要做的是,当您需要定义某个对象时,为其提供函数前缀和标识符,以便避免冲突

您发布了一些代码,因此在1的声誉和体面的格式方面,您比大多数从1开始的人做得好得多。假设你的工作ID是79。因此,您需要定义以下内容:

option.job_79 = 1;
现在我将子对象a 1指定为状态,它已初始化。由于
选项
对象是全局范围,您可以再次调用
ajax()
函数,而不必知道另一个
ajax()
函数已经在运行,您只需检查
类型选项。作业\u 79
即可

一些建议:

如果您热衷于编程,您最终会希望将所有AJAX函数合并到一个经过优化的函数中,这不仅会大大简化代码,而且前期成本会为您节省,越早越好(尽管随着时间的推移,您需要对其进行更多的优化)

还要避免框架和库的弊端。人们对它们非常重视,但几年后当你想要更新时,你必须花上几天或几周的时间重构代码。除了我的经验水平之外,我从来没有因为浏览器更新而不得不只使用纯JavaScript重构代码。在这条道路上还隐藏着许多其他好处,而大多数人都没有意识到这一点