【问题标题】:Send HTTP request using JavaScript?使用 JavaScript 发送 HTTP 请求?
【发布时间】:2016-02-10 04:11:06
【问题描述】:

我正在尝试使用 GET 请求从 http://api.roblox.com/marketplace/productinfo?assetId=361192737 (link) 获取 JSON 对象,但它似乎不起作用。

(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 请求更没有经验。我做错了什么?

【问题讨论】:

标签: javascript google-chrome-extension xmlhttprequest


【解决方案1】:

回调“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 );
})();

【讨论】:

  • 完美运行。它不适用于 Chrome 扩展程序,但我会接受你的回答,因为你是完全正确的
  • @RafDev 主机权限是否与您的扩展程序权限中的api.roblox.com 匹配? (developer.chrome.com/extensions/match_patterns)
  • @apsillers 是的,我正在使用他们推荐的 XMLHttpRequest 方法,但它仍然给我一个错误:“XMLHttpRequest cannot load api.roblox.com/marketplace/productinfo?assetId=36119273. No 'Access-Control-Allow-Origin' header is存在于所请求的资源上。因此,不允许访问源“chrome-extension://lcdggcmeegnliipmgejhcicbnnjkajch”。”
  • @RafDev 这正是跨域 XHR 权限阻止的错误消息,因此您可能没有正确声明您的权限。 (如果您的权限配置正确,那么内容脚本和后台页面中都将允许跨域请求。)但这可能是一个完全独立的问题的材料。
  • @RafDev 不,该匹配模式正是我第一条评论(developer.chrome.com/extensions/match_patterns)链接中“无效匹配模式”下第一个条目中提到的形式;它没有路径。
猜你喜欢
  • 2014-12-24
  • 2016-06-08
  • 2018-02-07
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多