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レスポンスのメタフィールドに実際のステータスコードを反映します。

どんな助けも素晴らしいだろう、ありがとう!

3
なぜあなたはjsonpについて気にしますか?ちょうどjsonの応答を使用して...
追加された 著者 Ilia G,
ああ、それは理にかなっている
追加された 著者 Ilia G,
JSONを使用すると、次のような結果が得られます:XMLHttpRequestはを読み込めませんapi.tumblr.com/v2/blog/MYTUMBLRNAME.tumblr.com/… Origin 0.0.0.0:3000 は、Access-Control-Allow-Originによって許可されていません。
追加された 著者 Galaxy,
余分な、最後のカンマは有効ですか?
追加された 著者 jli,

2 答え

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ものは構文エラーです。

What happens to success? I don't really know. Try and find out :) It will probably be called but data parameter likely be null or something. The issue here is that jQuery names it's callback parameter callback, where as Tumblr is expecting jsonp. Upon 200 response jQuery likely simply eval()s the response, which is why myJsonpCallback is actually called.

7
追加された
@ギャラクシーは答えを更新しました。
追加された 著者 Ilia G,
私はこれが古い返答であることを知っていますが、それは検索の先頭に現れました。情報を追加したい: dataType: "jsonp" を指定する必要があります。しかし、Tumblr APIは現在、「コールバック」パラメータを受け入れているため、このようにする必要はありません。 API呼び出しで必要なもの(この場合は api_key )をすべて提供し、成功コールバックで残りの部分を処理させます。必要に応じて(通常は良い方法ですが)、外部からmyJsonpCallbackを定義できますが、成功から呼び出すことができます。
追加された 著者 Greg Pettit,
それは動作します! 1つの質問、これは今「成功」機能とどのように機能しますか?
追加された 著者 Galaxy,

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)
}

How to use it: jsonpRequest({offset: 50, limit: 5});

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

Alternative usage: jsonpRequest({offset: 50, limit: 5, callback: "nameOfMyAmazingCallbackFunction"});

function nameOfMyAmazingCallbackFunction(data){do stuff here ...}
3
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript