javascript - 无法正确获取 JSON/JSONP

标签 javascript jquery ajax json api

我正在尝试/尝试学习如何与 API 交互,但陷入了第一步。我正在尝试从 Fever Public API 提取数据以获取订阅的 RSS 源列表。 API 看起来非常简单 - http://feedafever.com/api .

我可以使用那里提供的小部件获取数据,但是当我尝试编写自己的代码来使用 Javascript 存储数据时,一切都崩溃了 - 我似乎无法从服务器获得响应.

我用我的代码启动了一个 JSFiddle http://jsfiddle.net/WZHKA/ 。我现在只想返回 JSON 对象,然后我就可以从那里开始。为了方便起见,该功能也在下面。

(它有临时登录详细信息,因为我认为需要它们 - RSS 无论如何都不是那么私密)

任何帮助都会很棒!我被困住了,这似乎是所有教程所说的要做的事情。

谢谢!

function buildAPI() {

// FEVER INSTALLATION CONFIG
var url     = 'fever.tommaitland.net/fever';
var email   = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="02766d6f6f636b766e636c66426f672c616d6f" rel="noreferrer noopener nofollow">[email protected]</a>';
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();
});

最佳答案

不幸的是,我认为 feedafever 的 api 服务器设置有问题。我悲观地认为与 api 交互的唯一方法是使用 iframe,测试小部件就是这样做的。让我解释一下原因。

首先,api服务器没有设置其响应头来接受跨域访问。他们应该做类似的事情

response.set_header("Access-Control-Allow-Origin","*")

在服务器端接受跨域访问。由于他们没有这样做,因此您必须使用 jsonp 来避免 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 将在 url 中添加 callback=JSONP 作为参数,并自动执行 JSONP 作为 ajax 回调。注意:由于 JSONP 作为 javascript 函数提供,因此它仅适用于 http GET

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

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

关于javascript - 无法正确获取 JSON/JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168374/

相关文章:

javascript - 如何使用左/右循环浏览div

javascript - 如何创建一个 xmlhttprequest?

javascript - Ajax 表单在当前页面提交

javascript - 搜索字段为空时隐藏结果 div - Ajax Live Search

Javascript 没有从 html 按钮调用

javascript - 在现有隐藏功能中添加 jQuery 删除确认框

javascript - 如何在已经运行的Electron应用程序中通过 “open with”打开文件?

java - 自定义 JSON 来填充数据表

javascript - JQuery 在加载 html 后获取 id

javascript - 使用 jQuery 添加类,但要确保它在类之后使用所有标签