jqueryajax-tumblrapiv2

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

我试图深入探究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
,其中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 ...}