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 サービスも試しました。
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"); }
});
}
ただし、結果は同じで、成功のコールバックは発生しません。正しい方向への助けやナッジは大歓迎です!