2017-10-19 89 views
-1

我试图在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); 

由于任何人谁可以帮助!

+1

该状态为0,因为该调用还没有返回,但... – Dekel

+0

你介意详细说明吗?我是否在代码中过早询问状态? – Odocoileus

+0

@Oocoocoileus AJAX是异步的。在发生任何事情之前,你正在询问状态。把它放到'onreadystatechange'函数中。 – Barmar

回答

-1

documentation

请求完成以前,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(); 
}