无法执行使用Javascript返回JSON的简单GET请求

时间:2011-06-03 16:56:24

标签: javascript jquery ajax json

我对Javascript很恐怖,所以提前抱歉我会继续前进并假设这是一个非常愚蠢的问题。

我只是尝试向给定用户执行GitHub的公共repo API的GET请求,并将值作为JSON返回。

这是我正在尝试使用的功能:

function get_github_public_repos(username) {

    var the_url = "http://github.com/api/v2/json/repos/show/" + username

    $.ajax({
      url: the_url,
      dataType: 'json',
      type: 'get',
      success: function(data) {
        alert('raw data: ' + data)
        var json_response = $.parseJSON(data);
        alert(json_response);
      }
    });
}

这为数据返回Null。在控制台中,我看到Failed to load resource: cancelled。我知道网址是正确的,因为如果我在网址上运行curl,它会返回预期的数据。

6 个答案:

答案 0 :(得分:3)

jQuery的ajax函数支持JSONP,它允许跨域请求(因为你试图从另一个域请求来自github.com的数据)。只需将dataType从'json'更改为'jsonp';

function get_github_public_repos(username) {

    var the_url = "http://github.com/api/v2/json/repos/show/" + username

    $.ajax({
      url: the_url,
      dataType: 'jsonp',
      type: 'get',
      success: function(data) {
        var json_response = data;
        alert(data);
      }
    });
}

更新:需要注意的是,最终品脱(在本例中为github.com的API)必须支持JSONP才能实现。对于任何跨域请求,它不是一个固定的解决方案,如评论中所指出的那样。

答案 1 :(得分:0)

在其他服务器上发出请求时,JavaScript会受到跨域限制。

答案 2 :(得分:0)

好吧,除非您在github.com域中运行代码,否则无效。

您只能在自己的域中使用simle ajax。

一种解决方案是为其创建代理。在您的服务器上创建一个页面,使用curl获取您所请求的(域外)内容并打印它。然后用ajax调用此代理。

答案 3 :(得分:0)

由于相同的源策略,XmlHttpRequest对象($ ajax使用)无法从其他域下载内容。您需要使用诸如JSONP之类的东西才能从浏览器中执行此操作。

答案 4 :(得分:0)

正如其他人所说,你不能在远程域上执行ajax。

您需要在您的域(例如php)上编写服务器端脚本,这将执行从github域检索所需信息的脏工作。

然后,使用您的ajax查询服务器端脚本以获取信息。

答案 5 :(得分:0)

  

我知道网址是正确的,因为如果   我在网址上运行curl,它返回   预期数据。

使用这个想法让你的ajax工作。在您的网站上创建一个代理页面,该页面使用curl检索您想要的数据,然后让您的“the_url”变量指向您网站上的该页面。跨域限制使您无法以您尝试的方式使用ajax。

相关问题