标签:
在web开发中,如果你要在不同域下进行数据异步请求,会出现一个No ‘Access-Control-Allow-Origin’ header is present on the requested resource.”的错误提示。
该提示信息说明,跨域请求是违反了“同源策略”的。
但是在开发中又难免会遇到跨域请求的需求,所以前辈们也是留下了跨域请求数据的方法jsonp跨域请求。
我们以最为典型的Jquery做例子,后台用的asp.net mvc。
我们先构造一个action的返回对象,用于返回jsonp数据
#region JsonResult public class JsonpResult<T> : ActionResult { public T Obj { get; set; } public string CallbackName { get; set; } public JsonpResult(T obj, string callback) { this.Obj = obj; this.CallbackName = callback; } public override void ExecuteResult(ControllerContext context) { var js = new System.Web.Script.Serialization.JavaScriptSerializer(); var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")"; context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.Write(jsonp); } } #endregion
写一个供前台调用的action ,callback参数是必须的一个参数
public ActionResult AjaxJsonp(string s, string f,string callback) { string result=s+‘-‘+f; return new JsonpResult<object>(new { result = result }, callback); }
然后我们在前台用Ajax跨域调用该方法(如果是在本地测试,在不同的端口号下即可)
$.ajax({ type: "GET", url: "AjaxJsonp?callback=?", data: { s: ‘‘,f:‘‘}, cache: false, error: function () { alert("程序出错,请联系管理员."); }, dataType: "jsonp", jsonp: ‘callback‘, success: function (result) { if (result) { //返回对象处理 } } });
标签:
原文地址:http://www.cnblogs.com/huhangfei/p/4989201.html