无法正确获取JSON/JSONP



我正在试验/试图学习如何与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 :错误。

简而言之,这不是你的错。你可以正确使用这个api的唯一选项是iframe。

最新更新