jqueryajax-tumblrapiv2
我试图深入探究Tumblr的黑暗世界,但不明白如何克服以下错误:jqueryajax-tumblrapiv2,ajax,jquery,tumblr,Ajax,Jquery,Tumblr,我试图深入探究Tumblr的黑暗世界,但不明白如何克服以下错误: Uncaught SyntaxError: Unexpected token : 我相信这可能是因为我得到了json,但我试图使用jsonp。以下是我想要发送的内容: $(function(){ $.ajax({ type: "GET", url : "http://api.tumblr.com/v2/blog/MyTumblrName.tumblr.com/info", dataType: "jsonp
Uncaught SyntaxError: Unexpected token :
我相信这可能是因为我得到了json,但我试图使用jsonp。以下是我想要发送的内容:
$(function(){
$.ajax({
type: "GET",
url : "http://api.tumblr.com/v2/blog/MyTumblrName.tumblr.com/info",
dataType: "jsonp",
data: {
api_key : "MyTumblrApi"
},
success: function(data){
console.log(data);
},
});
});
我得到了一个200 OK的回复,数据仍然正确,但仍然是上面的错误(我不理解,希望了解更多)
Tumblr还善意地指出了以下几点,但具体细节我还不清楚
使用HTTP GET发出的所有请求都启用了JSONP。要使用JSONP,
将jsonp=和回调函数的名称追加到请求中。
JSONP请求将始终返回HTTP状态代码200,但将
在JSON响应的元字段中反映真实状态代码
任何帮助都会很棒,谢谢 按照Tumblr的指示执行-向请求中添加回调函数名
myJsonpCallback = function(data)
{
console.log(data);
}
$.ajax({
type: "GET",
url : "http://api.tumblr.com/v2/blog/MyTumblrName.tumblr.com/info",
dataType: "jsonp",
data: {
api_key : "MyTumblrApi",
jsonp : "myJsonpCallback"
}
});
========================================================
编辑:console.log是一个语法错误,因为我没有实际测试这段代码
成功会发生什么?我真的不知道。尝试并找出:)它可能会被调用,但数据参数可能为null或其他。
这里的问题是jQuery将其回调参数命名为
callback
,其中as Tumblr期望jsonp
。在收到200个响应后,jQuery很可能只是eval()
s响应,这就是实际调用myJsonpCallback
的原因。如果您不想使用jQuery:
var tumblrFeed = document.createElement('script');
tumblrFeed.setAttribute("src", "http://api.tumblr.com/v2/blog/{blog.tumblr.com}/posts?api_key={your api key}&jsonp=callback");
document.getElementsByTagName("head")[0].appendChild(tumblrFeed)
function callback(data){
console.log(data);
}
我为此创建了一个简单的函数:
function jsonpRequest(opt){
var params = "";
var blogName = "{your blog name}";
var api_key = "{api key}";
if("selector" in opt){params = "id=" + opt.selector;}
if(("offset" in opt) && ("limit" in opt)){params = "limit=" + opt.limit + "&offset=" + opt.offset;}
if("callback" in opt){params += "&jsonp=" + opt.callback;}else{params += "&jsonp=callback";}
params += "&api_key=" + api_key;
var tumblrFeed = document.createElement('script');
tumblrFeed.setAttribute("src", "http://api.tumblr.com/v2/blog/" + blogName + "/posts?" + params);
document.getElementsByTagName("head")[0].appendChild(tumblrFeed)
}
如何使用它:
jsonpRequest({偏移量:50,限制:5})
替代用法:
jsonpRequest({offset:50,limit:5,回调:“nameofYamazingCallbackFunction”})
你为什么关心jsonp?只要使用json响应……如果使用json,我会得到以下结果:XMLHttpRequest无法加载。Access-Control-Allow-Origin不允许使用Origin。那个额外的最后一个逗号有效吗?有效!有一个问题,这是如何与“success”功能一起工作的?我知道这是一个古老的回答,但它出现在搜索的顶部。想要添加一些信息:您仍然需要指定
数据类型:“jsonp”
;但是,tumblrapi现在接受“callback”参数,因此不再需要这样做。提供API调用所需的一切(在本例中,只需API\u键
),然后让成功回调处理其余部分。如果您愿意,您仍然可以在外部定义“myJsonpCallback”(这通常是一个好的实践),但可以从success调用它。
function callback(data){do stuff here ...}
function nameOfMyAmazingCallbackFunction(data){do stuff here ...}