【ドメイン間アクセス】jsonpによるドメイン間データ取得に失敗しました.例えば、問題、IEでエラーが発生しました.SCRIPT 1004:欠落';
4273 ワード
解決策:バックエンドの戻りデータをjsonpに改造し、callback関数で戻りパラメータを包み、具体的には以下の通りである.
1 jsonpの名前は指定しません:
$.ajax({
url: 'http://lifeloopdev.info/get_events',
dataType: "jsonp",
data: "offset=0&num_items=10",
username: 'username',
password: 'password',
success: function (data) {
$.each(data.success, function (i, item) {
$("body").append('' + item.title + '');
});
}
});
サーバは、次のようにデータの例を返す必要があります.
Response.ContentType="text/html; charset=utf-8";
String callback = Request.QueryString["callback"].ToString();
Response.Write(callback + "{ \"success\": [{ \"id\": 1, \"title\": \"title 1\" }, { \"id\": 2, \"title\": \"title 2\" }, { \"id\": 3, \"title\": \"title 3\"}] }");
2 jsonp名と関数名を返すfunction、
// jsonp callback
$.ajax({
url: 'http://lifeloopdev.info/get_events',
dataType: "jsonp",
data: "offset=0&num_items=10",
username: 'username',
password: 'password',
jsonp: "successCallback",
jsonpCallback: 'successCallback'
});
function successCallback(data) {
$.each(data.success, function (i, item) {
$("body").append('' + item.title + '');
});
}
サーバは、次のようにデータの例を返す必要があります.
Response.ContentType="text/html; charset=utf-8";
String callback = Request.QueryString["successCallback"].ToString();
Response.Write(callback + "{ \"success\": [{ \"id\": 1, \"title\": \"title 1\" }, { \"id\": 2, \"title\": \"title 2\" }, { \"id\": 3, \"title\": \"title 3\"}] }");
3 jsonp名を指定し、関数名を返すfunction、
$.ajax({
url: 'http://lifeloopdev.info/get_events',
dataType: "jsonp",
data: "offset=0&num_items=10",
username: 'username',
password: 'password',
jsonp: "successCallback",
success: function (data) {
$.each(data.success, function (i, item) {
$("body").append('' + item.title + '');
});
}
});
サーバは、次のようにデータの例を返す必要があります.
Response.ContentType="text/html; charset=utf-8";
String callback = Request.QueryString["successCallback"].ToString();
Response.Write(callback + "{ \"success\": [{ \"id\": 1, \"title\": \"title 1\" }, { \"id\": 2, \"title\": \"title 2\" }, { \"id\": 3, \"title\": \"title 3\"}] }");
4 getJSON()でデータを取得し、
/**
* :
* jsoncallback=? ! jsoncallback=? ? jsoncallback=? , 。
* ? jsoncallback , jsoncallback JSON .
*/
$.getJSON("http://192.168.20.86/friend/getMyJsonData.aspx?jsoncallback=?", function (data) {
$.each(data.success, function (i, item) {
$("body").append('' + item.title + '');
});
});
サーバは、次のようにデータの例を返す必要があります.
Response.ContentType="text/html; charset=utf-8";
String callback = Request.QueryString["jsoncallback"].ToString();
Response.Write(callback + "{ \"success\": [{ \"id\": 1, \"title\": \"title 1\" }, { \"id\": 2, \"title\": \"title 2\" }, { \"id\": 3, \"title\": \"title 3\"}] }");
変換元:http://www.cnblogs.com/yeminglong/archive/2013/06/24/3152976.html