2

我正在试验/尝试学习如何与 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();
});
4

1 回答 1

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")

{"foo":"bar"}并用 javascript 标签包装 json(假设它是)

JSONP({"foo":"bar"}) // the name JSONP is not fixed, you can name it whatever you like

jQuery 将callback=JSONP作为参数添加到 url 并JSONP自动执行为 ajax 回调。注意:由于 JSONP 是作为 javascript 函数提供的,因此它仅适用于 http GET

在您的情况下,feedafever 将其内容类型设置为text/jsonChrome 需要脚本,因此您收到了Uncaught SyntaxError: Unexpected token :错误。

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

于 2013-01-05T05:45:00.233 回答