jsonp实现跨域请求
在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
$.ajax({ async: false, url: "http://local.temp.uploading.com/GetPicture.ashx?param=5d6c8bcc-7d20-4321-ace9-de73310a3dd5^RENTHOUSEDOCUMENTWITHSIGN", type: "GET", dataType: 'jsonp', //jsonp的值自定义,如果使用jsoncallback,那么服务器端,要返回一个jsoncallback的值对应的对象. jsonp: 'jsonpCallback', //要传递的参数,没有传参时,也一定要写上 data: null, timeout: 5000, //返回Json类型 contentType: "application/json;utf-8", //服务器段返回的对象包含name,data属性. success: function (result) { alert(result.url); }, error: function (jqXHR, textStatus, errorThrown) { alert(textStatus); } });
服务器返回
context.Response.Write(Jsonp(context, "\"url\":\"" + rooturl + Common.GetImagePath(userGuid) + dt.Rows[0]["FileName"] + ".mark.jpg\",\"id\":\"" + dt.Rows[0]["Id"].ToString() + "\",\"original\":\"" + rooturl + Common.GetImagePath(userGuid) + dt.Rows[0]["FileName"] + "\"" ));
/// <summary> /// 处理Json读取数据. /// </summary> /// <param name="context">Http对象.</param> /// <param name="s">结果值</param> /// <returns></returns> private string Jsonp(HttpContext context, string s) { try { string ret = context.Request["jsonpCallback"];//jsonpCallback string rs = ret+ "({" + s + "})"; return rs; } catch { return "result:true"+",data:\""+s+"\""; } }