使用jsonp解决ajax跨域请求
前端ajax请求
$.ajax({
type: "get",
url: "http://localhost:9524/Home/ProcessCallback", // 这个就是不同于当前域的一个URL地址,这里单纯演示,所以同域
dataType: "jsonp",
jsonp: "jsonpcallback", // 指定回调函数,名字随便,但是必须与下面的GET参数一致
data: "name=fcw&sex=boy&jsonpcallback=?", // jsonpcallback与上面的jsonp值一致
success: function (json) {
alert(json.Name+jsonp.Sex);
}
});
后台Controller
[HttpPost]
public string ProcessCallback(string name, string sex)
{
string jsonpCallback = Request.QueryString["jsonpcallback"];
var user = new User
{
Name = name,
Sex= sex
};
return jsonpCallback + "(" + new JavaScriptSerializer().Serialize(user) + ")";
}
ContentType
contentType是post方式发送数据的前提,默认为application/x-www-form-urlencoded
当contentType为application/json时,传输给后台的数据必须为json格式的,否则会引起500错误 ,即data:“{‘data’:'+this.data+'}”
当contenType为默认时,表示为默认发送格式,即data:{data:this.data}
contentType为发送数据的格式,dataType为响应数据的格式,html/xml/json三种
data序列化为json/xml
json: res=Dictionary<string, string>string postdata= JsonConvert.SerializeObject(res);xml: dic = new Dictionary<string, string>var sb = new StringBuilder();sb.Append("<xml>");foreach (var d in dic){sb.Append("<" + d.Key + ">" + d.Value + "</" + d.Key + ">");}sb.Append("</xml>");