2012-04-23 10 views
10

jQueryの$.ajaxメソッドを使用して、JSONP互換Webサービスからデータを取得しています。応答を取得し、受信したデータをHTMLに表示する限り、すべて正常に動作しているようです。しかし、私はajaxメソッドの成功コールバックを呼び出すことができませんでした。たとえ私がサービスから有効な応答を受け取ったとしても、エラーコールバックは常に発せられます。それは、SOおよび他の場所で、ここで同様の質問を読んでからjQuery ajax成功コールバックが起動しない

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

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

と一致するコールバック関数:ここ

は、私はこれをテストするために作られたシンプルなJS関数の例でありますこれは、検証されないJSONを返すサービスによって引き起こされることが最も多いと思われます。例えば、私の目的のために、私は、社内のWebサービスを使用していますが、このようなFlickrのによって提供されるような、同様に他のJSONPサービスを試してみました:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah

を両方のFlickrのサービスや鉱山検証からJSON jsonlintを使用しているので、私が知る限り問題はないようです。

この問題の解決策を探す際に、jquery-jsonpというjQueryプラグインを使用しようとしました。これはhttp://code.google.com/p/jquery-jsonp/です。

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

しかし、結果は同じで、成功コールバックは発火しません:これは、独自の$.jsonpとjQueryの$.ajaxコールので、上記のコードは次のようになりますが置き換えられます。どのような助けや正しい方向への微妙な感謝は大いに評価されるでしょう!

+1

サーバーの応答は何ですか?あなたは、Dragonfly(オペラ)、Firebug(FireFox)、Developer Tools(Chrome)などのdeveleopersツールで見つけることができます –

+0

url: "http://example.com/api/service?callback=blah"!=あなたの関数名bleh ()。タイプミスかもしれませんか? – mayrs

+0

@BartoszGrzybowskiサーバーの応答ステータスは、200 OK – Limescale

答えて

4

jsonpCallback -option経由ではなく、URL内でコールバック関数を定義します。

function doJsonp() 
{ 
    $.ajax({ 
     url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?", 
     dataType: "jsonp", 
     crossDomain: true, 
     jsonpCallback:'blah',//<<< 
     success: function() { console.log("success"); }, 
     error: function() { console.log("error"); } 
    }); 
} 
関連する問題