2016-02-09 106 views
0

我试图从使用GET请求的http://api.roblox.com/marketplace/productinfo?assetId=361192737link)得到一个JSON对象,但它似乎没有工作。使用JavaScript发送HTTP请求?

(function(){ 
    var xmlHttp; 
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.onreadystatechange = ProcessRequest; 
    xmlHttp.open("GET", 'http://api.roblox.com/marketplace/productinfo?assetId=361192737', true); 
    xmlHttp.send(null); 
    function ProcessRequest(){ 
     console.log(xmlHttp.responseText); // "" (empty string) 
     var respData = JSON.parse(xmlHttp.responseText) || {}; 
     RemoteEvents = JSON.parse(respData.Description) || null; 
    } 
})() 

这是在开发模式的Chrome扩展。我对JavaScript并不是很有经验,甚至对于HTTP请求也不甚了解。我究竟做错了什么?

+0

'onreadystatechange'触发多次。你永远不会检查它是什么样的状态改变 - 它们中的许多没有响应文本,因为请求还没有达到该过程的那个阶段。 –

+0

你是否按照指示:https://developer.chrome.com/extensions/xhr – epascarello

+1

根据你要求的最低版本,你也可以使用更简单的'fetch' api https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API –

回答

2

回调“onreadystatechange”将被多次调用不同的“状态代码”。 在尝试获取数据以确保请求已结束之前,您必须先检查代码。 当它完成的代码值是4,看看这里: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp

这应该工作:

(function(){ 
    var xmlHttp; 
    xmlHttp = new XMLHttpRequest(); 
    xmlHttp.onreadystatechange = function() { 
     if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { 
      console.log(xmlHttp.responseText); // "" (empty string) 
      var respData = JSON.parse(xmlHttp.responseText) || {}; 
      RemoteEvents = JSON.parse(respData.Description) || null; 
     } 
    }; 
    xmlHttp.open("GET", 'http://api.roblox.com/marketplace/productinfo?assetId=361192737', true); 
    xmlHttp.send(null); 
})(); 
+0

完美工作。它不适用于Chrome扩展,但我会接受你的答案,因为你是完全正确的 – RafDev

+0

@RafDev是否与你的扩展的权限中存在'api.roblox.com'匹配的主机权限? (https://developer.chrome.com/extensions/match_patterns) – apsillers

+0

@apsillers是的,我正在使用他们的XMLHttpRequest推荐方法,但它仍然给我一个错误:“XMLHttpRequest无法加载http://api.roblox。 com/marketplace/productinfo?assetId = 36119273。请求的资源中没有'Access-Control-Allow-Origin'标头。因此,'chrome-extension:// lcdggcmeegnliipmgejhcicbnnjkajch'不允许访问。 – RafDev