$.ajax({
async:false,
url: '', // クロスドメイン URL
type: 'GET',
dataType: 'jsonp',
jsonp: 'jsoncallback', // デフォルトのコールバック
data: mydata, // Request data
timeout: 5000,
beforeSend: function(){ //jsonp メソッドがトリガーされないのは、dataType が jsonp として指定されている場合、ajax イベントではなくなることが考えられます。
},
success: function (json) { //クライアント側の jquery によって事前定義されたコールバック関数は、クロスドメイン サーバーで json データを正常に取得した後、動的に実行されます
if(json.actionErrors.length!= 0){
alert(json.actionErrors);
}
},
complete: function(XMLHttpRequest, textStatus){
},
error: function(xhr){
//Jsonp モードこのメソッドはトリガーされません
//リクエスト エラー処理
alert("リクエスト エラー (相関ネットワークのステータスを確認してください) .)");
}
});
$.getJSON(url "?callback=?",
function(json){
});
このメソッドは、実際には上記の $.ajax({..}) の高レベル ラッパーの例です。
サーバー側でコールバック パラメーター (例: jsonp*****) を取得して、jQuery 側で後続のコールバックを取得します
そして、次のようなものを返します: "jsonp**** *(" 返される json 配列 ")";
jquery はコールバック メソッドを通じてこれを動的にロードし、呼び出します: jsonp*****(json array);
これにより、クロスドメインの目的が達成されます。
JSONP は一種のスクリプト インジェクション (スクリプト インジェクション) 動作であるため、一定のセキュリティ リスクもあります。
注: jquey はクロスドメイン投稿をサポートしていません。
参考:
http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/