【ドメイン間アクセス】jsonpによるドメイン間データ取得に失敗しました.例えば、問題、IEでエラーが発生しました.SCRIPT 1004:欠落';

4273 ワード

【跨域访问】用jsonp跨域获取数据失败了,如题,IE中报错:SCRIPT1004: 缺少 ';'_第1张图片
解決策:バックエンドの戻りデータを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