我正在尝试/尝试学习如何与API进行交互,而我正陷入原点。我正在尝试从Fever Public API中提取数据以获取订阅的RSS源列表。 API似乎很简单 - http://feedafever.com/api。
我可以使用那里提供的小部件来获取数据,但是当我尝试编写自己的代码,让我用Javascript存储数据时,一切都崩溃了 - 我似乎无法从服务器获得响应
我在http://jsfiddle.net/WZHKA/使用我的代码启动了一个JSFiddle。我只想暂时返回JSON对象,我可以从那里开始。为方便起见,下面的功能如下。
(它有临时登录详细信息,因为我认为他们是需要的 - 无论如何RSS都不是私有的)
任何帮助都会很棒!我被卡住了,这似乎是所有教程所说的。
谢谢!
function buildAPI() {
// FEVER INSTALLATION CONFIG
var url = 'fever.tommaitland.net/fever';
var email = 'tommaitland@me.com';
var pass = 'testpassword';
var args = 'groups&feeds';
var pargs = '';
var format = '';
if (!url.match(/^https?:\/\//)) url = 'http://' + url;
if (!url.match(/\/$/)) url += '/';
//var format = $$('format').checked ? '=xml' : '';
var api_key = MD5(email+':'+pass);
pargs = 'api_key=' + api_key + '&' + pargs;
url += '?api' + format +'&' + args;
$.ajax({
type: 'POST',
url: url,
data: pargs,
success: function(data) {
document.write(data);
},
dataType:'jsonp'
});
return false;
};
$(document).ready( function() {
buildAPI();
});
答案 0 :(得分:2)
不幸的是,我认为feedafever的api服务器设置有问题。我悲观地认为你可以与api交互的唯一方法是使用iframe,测试小部件就是这样做的。让我解释原因。
首先,api服务器没有设置它的响应头来接受跨域访问。他们应该做点什么
response.set_header("Access-Control-Allow-Origin","*")
在服务器端接受跨域访问。由于他们没有这样做,你必须使用jsonp来避免not allowed by Access-Control-Allow-Origin
问题。
但是,当请求将jsonp作为响应数据类型时,api服务器应响应“真正的”jsonp,这意味着它们应该在服务器端执行某些操作,如
response.set_header("Content-Type", "text/javascript")
用javascript标签包装json(假设它是{"foo":"bar"}
)
JSONP({"foo":"bar"}) // the name JSONP is not fixed, you can name it whatever you like
jQuery会在网址中添加callback=JSONP
作为参数,并自动执行JSONP
作为ajax回调。注意:由于JSONP是作为javascript函数提供的,因此它仅适用于http GET
。
在您的情况下,feedafever将其内容类型设置为text/json
,而Chrome需要脚本,因此您遇到Uncaught SyntaxError: Unexpected token :
错误。
简而言之,这不是你的错。正确使用此api的唯一选择是iframe。