我正在试验/试图学习如何与api交互,我被困在第一步。我正试图从Fever公共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();
});
不幸的是,我认为feedfever的api服务器设置有问题。我悲观地认为,与api交互的唯一方法是使用iframe,测试小部件就是这样做的。让我解释一下原因。
首先,API服务器没有设置它的响应头来接受跨域访问。他们应该这样做
response.set_header("Access-Control-Allow-Origin","*")
在服务器端接受跨域访问。因为他们没有这样做,你必须使用json来避免not allowed by Access-Control-Allow-Origin
问题。
然而,当请求请求jsonp作为响应数据类型时,api服务器应该响应一个"真正的"jsonp,这意味着他们应该在服务器端做一些事情,如
response.set_header("Content-Type", "text/javascript")
和包装json(假设它是{"foo":"bar"}
)与javascript标签
JSONP({"foo":"bar"}) // the name JSONP is not fixed, you can name it whatever you like
jQuery将在url中添加callback=JSONP
作为参数,并自动执行JSONP
作为ajax回调。注意:由于JSONP是作为javascript函数提供的,它只适用于http GET
。
在你的情况下,feedfever设置他们的内容类型为text/json
,而Chrome浏览器期望脚本,所以你得到了Uncaught SyntaxError: Unexpected token :
错误。