一、什么是Jsonp
jsonp(json with padding) 是一种“使用模式”,可以让网页从别的域名那获取资料,即跨域读取数据。
为什么会使用jsonp呢?因为同源策略(数据来源一致),现在所有支持javascript 的浏览器都会使用这个策略。
Ajax请求资源受同域的限制,不管是静态资源,动态资源,web服务都不行。
web页面上调用的js文件不受跨域的影响,即(a.cubejoy.com域名下的a.html可以调用b.cubejoy.com域名下的b.js 但是b.js里ajax请求的数据获取不到)
c#具体用法:
ReturnGrade: function () {
$.ajax({
url: "//my.cubejoy.com/Handler/MyData.ashx",
type: "get",
dataType: "jsonp",
jsonp: "jsonpCallBack",
data: { "type": "UserGrade" },
success: function (data) {
try {
if (data.State) {
if (data.Data) {
$(".userinfoGradeName").text(data.Data.split('|')[1]);
$(".userinfoGrade").text(data.Data.split('|')[0]);
}
}
else {
Common.MyMsg.ErrorMsg(data.Msg);
}
} catch (e) {
Common.MyMsg.ErrorMsg(e.message);
}
}
});
},
后台cs
private string ReturnUserGrade(HttpContext context)
{
result = new Utils.HandlerResult();
string jsonpCallBack = context.Request["jsonpCallBack"];
try
{
string userid = IsLogin().uid.ToString();
result.State = Utils.HandlerState.Yes;
result.Data = Common.AppCode.GetUserGrade(userid);
}
catch (Exception ex)
{
result.State = Utils.HandlerState.No;
result.Msg = ex.Message;
GetErrorLog(ex, "ReturnUserGrade");
}
return jsonpCallBack + "(" + CommonDLL.Utils.ObjectToJsonStr(result) + ")";
}