10

jQuery の$.ajaxメソッドを使用して、JSONP 互換の Web サービスからデータを取得しています。応答を取得し、受信したデータを HTML に表示する限り、すべて正常に動作しているようです。ただし、ajax メソッドの成功コールバックを起動することができませんでした。さらに奇妙なのは、サービスから有効な応答を受け取った場合でも、エラー コールバックが常に発生することです。

これをテストするために作成した単純な js 関数の例を次に示します。

function doJsonp()
{
    $.ajax({
        url: "http://example.com/api/service?callback=blah",
        dataType: "jsonp",
        crossDomain: true,
        success: function() { console.log("success"); }, // This is never fired
        error: function() { console.log("error"); } // This is always fired
    });
}

および一致するコールバック関数:

function blah(data)
{
    console.log(data); // This is called properly
}

SO や他の場所で同様の質問を読むと、これはほとんどの場合、サービスが検証しない JSON を返すことが原因であると思われます。私の目的のために、私は社内の Web サービスを使用していますが、Flickr が提供するものなど、他の JSONP サービスも試しました。

http://api.flickr.com/services/feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=何とか

Flickr のサービスと私の両方の JSON は jsonlint を使用して検証されるため、私が知る限り、それは問題ではないようです。

この問題の解決策を探すために、http: //code.google.com/p/jquery-jsonp/ にある jquery-jsonp という jQuery プラグインを使用してみました。これにより、jQuery の$.ajax呼び出しが独自の呼び出しに置き換え$.jsonpられるため、上記のコードは次のようになります。

function doJsonp()
{
    $.jsonp({
        url: "http://example.com/api/service?callback=blah",
        success: function() { console.log("success"); },
        error: function() { console.log("error"); }
    });
}

ただし、結果は同じで、成功のコールバックは発生しません。正しい方向への助けやナッジは大歓迎です!

4

1 に答える 1

4

jsonpCallbackURL内ではなく、-optionを使用してcallback-functionを定義します。

function doJsonp()
{
    $.ajax({
        url: "http://api.flickr.com/services/feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=?",
        dataType: "jsonp",
        crossDomain: true,
        jsonpCallback:'blah',//<<<
        success: function() { console.log("success"); }, 
        error: function() { console.log("error"); } 
    });
}
于 2012-04-23T12:09:37.870 に答える