在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+""";
}
}