2012-02-11 15 views
2

jQueryを使用してクロスドメインAJAXリクエストを作成していますが、コールバック関数が起動していません(http://jsfiddle.net/zC8z5/参照)。ドキュメントを1としてjQuery JSONPコールバックが発生しない

function jsonpCallback(response){ 
    $('#code').text(response.data); 
} 

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    error: function(xhr, status, error) { 
     alert(error); 
    }, 
    success: function() { 
     alert("success");        
    }, 
    jsonp: false, 
    jsonpCallback: 'jsonpCallback' 
}); 

: "?コールバック" はjQuery 1.5のよう

、falseにJSONPオプションを設定するには、=」URLに文字列を追加したり、 を使用しようとするからjQueryの を防止します? "変換のために。この場合、明示的に をjsonpCallback設定に設定する必要があります。たとえば、{JSONP:偽、jsonpCallback: 「callbackName」}私は、コールバックを指定し、代わりにちょうどそれが動作成功イベント内のデータを処理していない場合

しかし、(http://jsfiddle.net/2gBRT/を参照してください)。

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    error: function(xhr, status, error) { 
     alert(error); 
    }, 
    success: function(data) { 
     jsonpCallback(data); 
    } 
}); 

jQueryでJSONPリクエストを作成する方法を誤解しましたか?

答えて

7

抜粋したドキュメントに記載されているように、サーバーでcallbackというパラメータが必要な場合、jQueryは空白を埋めるのに十分です。 Bitbucketは、このパラメータ名を使用しないので、あなたのようなURLを取得:実際にあなたのコールバックのために自動的に生成された関数名になり

https://api.bitbucket.org/.../?callback=jquery1234_5678 

jquery1234_5678を。 Bitbucketは次のような結果を返します。

jquery1234_5678({ 
    "node": "someId", 
    "path": "filename", 
    "data": "content" 
}) 

このように関数が呼び出されます。また、あなたが成功の一部(demo)を簡素化することができます:のBitbucketが異なるパラメータ名を期待した場合

success: jsonpCallback 

、あなたはJSONPの値としてそれを使用します。あなたが渡されたのであれば、たとえば、:

jsonp: "functionName" 

をURLは次のようになります。

https://api.bitbucket.org/.../?functionName=jquery1234_5678 

が、応答は同じになります。

jQueryに関数名を生成させたくない場合は、jsonpCallbackが必要です。

関連する問題