无法执行使用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。