对于AJAX请求,XMLHttpRequest.status为“0”
问题描述:
我试图在JavaScript中创建一个从条形码数据库API(http://upcdatabase.org/api)中获取数据的应用程序。当我发出AJAX请求时,GET请求正在进入API。我可以从API的网站上看到我提出了多少请求。对于AJAX请求,XMLHttpRequest.status为“0”
但是,我在Firefox,Chrome和Edge上每次都得到一个“0”的XMLHttpRequest.status。我有一种感觉,我错过了一些东西,因为这是我第一次这样做。
这里是我使用的代码:
var upc = prompt("Enter UPC Code:");
var requestUrl = "https://api.upcdatabase.org/product/" + upc +
"/73114EC2F9C47240583DBF3AA190CB4C";
function httpGetAsync(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
alert(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true);
xmlHttp.send();
alert(xmlHttp.status);
}
httpGetAsync(requestUrl);
由于任何人谁可以帮助!
答
请求完成以前,
status
的值为0
请求是不完整的,直到readyState == 4
,所以这是正常现象,如果0
您在测试成功之前记录status
。试试这个:
function httpGetAsync(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
alert(xmlHttp.status);
if (xmlHttp.status == 200) {
alert(xmlHttp.responseText);
}
}
};
xmlHttp.open("GET", theUrl, true);
xmlHttp.send();
}
该状态为0,因为该调用还没有返回,但... – Dekel
你介意详细说明吗?我是否在代码中过早询问状态? – Odocoileus
@Oocoocoileus AJAX是异步的。在发生任何事情之前,你正在询问状态。把它放到'onreadystatechange'函数中。 – Barmar