Jquery Ajax – Tumblr API v2

我正在尝试深入研究Tumblr阴暗世界的深度,并且无法理解如何克服以下错误:

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 ,其中Tumblr期待jsonp 。 在200响应时,jQuery可能只是eval()的响应,这就是实际调用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({offset:50,limit:5});

 function callback(data){do stuff here ...} 

替代用法: jsonpRequest({offset:50,limit:5,callback:“nameOfMyAmazingCallbackFunction”});

 function nameOfMyAmazingCallbackFunction(data){do stuff here ...}