解决方案:后端返回数据改造为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('<h1>' + item.title + '</h1>'); }); } });
服务器需要这样返回数据示例:
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('<h1>' + item.title + '</h1>'); }); }
服务器需要这样返回数据示例:
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('<h1>' + item.title + '</h1>'); }); } });
服务器需要这样返回数据示例:
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('<h1>' + item.title + '</h1>'); }); });
服务器需要这样返回数据示例:
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