使用JSONP彻底解决Ajax跨域访问Cookie Session的方案
最近做开发时要把图片文件放到另外一台服务器上(另外一个域名),因为这样分布式存放,网站打开速度会快很多。而我采用AJAX获取图片服务器上某用户的图片时遇到了问题,按照通常的方式无法获取信息,得到的Cookie都是null,后来想到浏览器出于安全考虑JavaScript和iframe不能跨域访问,那我们就要考虑使用其他途径来完成了,捣鼓了2天终于找到了解决方案,我使用JSONP来解决,请看。
JS代码:
-
$.ajax({
-
type: "get",
-
url: "http://www.oicqzone.com/userogin.aspx?jsoncallback=?", //这里必须使用?jsoncallback=?,否则一样无法获取。
-
data: { "name": name, "pass": pass }, //这里是参数,可以不用
-
dataType: "jsonp", //这个一定要,如果没有你永远无法获取信息
-
success: function(json){
-
var obj = eval( json ); //这个也是必备,由于我们用JSONP对象返回,所以不需的
-
//这里就是分解具体元素了,可以按照自己的需求设置好JSONP对象。
-
alert("success JSON Data:" + obj.usrName + " usrId:" + obj.usrId + " rndPassWord:" + obj.rndPassWord);
-
}
-
});
ASP.NET代码:
-
//注意JSON对象和值都必须使用双引号抱着,要不JS无法获得对象
-
string strJson = Request.QueryString["jsoncallback"] +
-
string.Format( "({{\"usrId\" : \"{1}\",\"usrName\" : \"{0}\",\"rndPassWord\" : \"{2}\"}})",
-
Accounts.UserEntity.UserId, Accounts.UserEntity.UserName, Accounts.UserEntity.Password );
-
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
-
Response.Write( strJson );