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

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

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

这是我正在尝试使用的function:

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 。 我知道URL是正确的,因为如果我在url上运行curl ,它会返回预期的数据。

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才能实现。 对于任何跨域请求,它不是一个固定的解决方案,如评论中所指出的那样。

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

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

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

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

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

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

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

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

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

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