我使用的是firefox插件生成器。运行此代码时出现"未定义回调"错误
function callback(data) {
window.alert(data.status);
}
$.ajax({
url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?",
dataType: "jsonp",
jsonp: "jsonp",
jsonpCallback: "callback"
});
这是api文档:https://www.compete.com/developer/documentation/
我假设您是从一个内容脚本中运行的。您必须考虑到,内容脚本并不是真正在与网页脚本相同的上下文中运行的——网页看不到内容脚本定义的功能,反之亦然(对此机制的详细描述)。JSONP的工作原理是在网页中插入一个<script>
标记。这个脚本将在网页的上下文中运行,它不会看到您在内容脚本中定义的回调函数。
要在窗口上下文中定义callback
函数,请执行以下操作:
unsafeWindow.callback = function(data)
{
window.alert(data.status);
};
但是,您应该认真对待文档中关于unsafeWindow
的警告,并尽可能避免它。使用扩展中的request
包加载数据:
require("request").Request({
url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112",
onComplete: function(response)
{
console.log(response.json);
}
});
然后,您可以通过常规消息将response.json
发送到您的内容脚本中。
试试这个。
$.ajax({
url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?",
dataType: "jsonp",
success: function(data) {
window.alert(data.status);
}
});
您不应该将jsonp=?
附加到您的url,这是由ajax函数完成的。
仅供使用:
url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=<your-api-key>&start_date=201112&end_date=201112",
实际上,为了回应Marcelo Diniz和任何试图让竞争对手API工作的人:
您需要将&jsonp=?
附加到您的url,否则您的ajax请求将始终失败。
我为此挣扎了一段时间,因为竞争对手的文件很模糊。