我正在尝试使用 jquery 进行直接的远程 json 调用。我正在尝试使用 reddit api。 http://api.reddit.com .这将返回一个有效的 json 对象。
如果我调用本地文件(这是从网站返回的保存到我的本地磁盘的文件),一切正常。
$(document).ready(function() {
$.getJSON("js/reddit.json", function (json) {
$.each(json.data.children, function () {
title = this.data.title;
url = this.data.url;
$("#redditbox").append("<div><a href=\"" + url + "\">" + title + "</a><div>");
});
});
});
如果我然后尝试将其转换为远程调用:
$(document).ready(function() {
$.getJSON("http://api.reddit.com", function (json) {
$.each(json.data.children, function () {
title = this.data.title;
url = this.data.url;
$("#redditbox").append("<div><a href=\"" + url + "\">" + title + "</a><div>");
});
});
});
它在 Safari 中可以正常工作,但在 Firefox 中不行。这是预料之中的,因为 Firefox 出于安全或其他原因不会进行远程调用。很好。
在 jquery 文档中,他们说要这样做 (jsonp):
$(document).ready(function() {
$.getJSON("http://api.reddit.com?jsoncallback=?", function (json) {
$.each(json.data.children, function () {
title = this.data.title;
url = this.data.url;
$("#redditbox").append("<div><a href=\"" + url + "\">" + title + "</a><div>");
});
});
});
但是它现在停止在 safari 和 firefox 上工作。已发出请求,但从服务器返回的内容似乎被忽略了。
这是我正在编写的代码的问题还是服务器返回的内容的问题?如何诊断此问题?
编辑将地址更改为真实地址。
最佳答案
JSONP是服务器端需要支持的东西。我找不到文档,但看起来,如果 Reddit 支持 JSONP,则它不包含 jsoncallback 查询变量。
JSONP 的作用是用 JavaScript 函数调用包装 JSON 文本,这允许您在代码中定义的任何函数处理 JSON 文本。但是,此功能确实需要在全局范围内可用。看起来 JQuery getJSON 方法为您生成了一个函数名,并将其分配给 jsoncallback 查询字符串变量。
关于javascript - jsonp 请求在 firefox 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/377794/