不废话了,上完代码准备洗澡睡觉:
function callBackfunction(data) { alert(data.age); }
$("#btnSubmit").click(function () { $.ajax({ type: "get", url: "http://localhost:41882/Home/JsonpCallBack", dataType: "jsonp", jsonpCallback: "callBackfunction", }); });
这里还有一种实现方式:
$.getJSON("http://localhost:41882/Home/JsonpCallBack?callback=?", function (json) { alert(json.age); });
第一个要注意的地方是jsonp其实本质上也是json,并且访问方式只能是get, 第一种方式看这个更加直观, 在第一种方式中年不需要在succes了,因为在jsonpCallback中已经实现了success,
后台代码:
public ActionResult JsonpCallBack() { string callback = Request.QueryString["callback"]; string json = "{'name':'张三','age':'20'}"; string result = string.Format("{0}", json); return Content(result); }
jsonp只支持get哦,这个一定要注意
但是,很多牛人经过各种改造我们有制作出来了JsonpResult, 因为mvc内置没有JsonpResult方法:
public class JsonpResult : JsonResult { object data = null; public JsonpResult() { } public JsonpResult(object data) { this.data = data; } public override void ExecuteResult(ControllerContext controllerContext) { if (controllerContext != null) { var Response = controllerContext.HttpContext.Response; var Request = controllerContext.HttpContext.Request; string callbackfunction = Request["callback"]; if (string.IsNullOrEmpty(callbackfunction)) { throw new Exception("Callback function name must be provided in the request!"); } Response.ContentType = "application/x-javascript"; if (data != null) { var serializer = new JavaScriptSerializer(); Response.Write(string.Format("{0}({1});", callbackfunction, serializer.Serialize(data))); } } } }
使用示例:
public ActionResult JsonpCallBack() { return new JsonpResult(new { name = "张三", age = 20 }); }