//派生JsonpResult子类 public class JsonpResult : ActionResult { public Object Data { get; set; } public JsonpResult(Object data) { Data = data; } public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.ContentType = "text/html; charset=utf-8"; var js = new System.Web.Script.Serialization.JavaScriptSerializer();
//注意这里 String JSONP = context.HttpContext.Request.QueryString["JSONP"]; if (String.IsNullOrEmpty(JSONP)) context.HttpContext.Response.Write(js.Serialize(Data)); else context.HttpContext.Response.Write(String.Format("{0}({1})", JSONP, js.Serialize(Data))); } }
//如果是跨域请求,那么这里的JSONP=?是必须的。(详见上面的派生子类) $.getJSON("http://www.you.com?JSONP=?", function (result) { });
能跨域请求action进行操作吗?比如在分站登陆,主站也同时登陆,用主站的登陆方法
@狼性法则: 当然,你仔细看上面的代码。上面有判断是否存在JSONP参数,如果不存在,那么直接返回JSON。