一、什么是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) + ")";
}