zoukankan      html  css  js  c++  java
  • 使用mvc3实现ajax跨域

    ajax跨域一般两种方式   1:cors,2:jsonp,

    1:cors

    jsonp是get形式,承载的信息量有限,所以信息量较大时CORS是不二选择

    在请求消息头添头 Access-Control-Allow-Origin  , 值可以为指定域名,也可以为*表示允许所有域名跨域仿问

    mvc代码

    public ActionResult Jump()
    {
        Response.AddHeader("Access-Control-Allow-Origin","*");  //对请求方域名没有要求
        //Response.AddHeader("Access-Control-Allow-Origin","http://www.baidu.com");   只请允许百度对其进行跨域仿问
        return View();           
    }
    View Code

     

    客户端使用正常的jquery.ajax就可以调用此方法了。

    2:jsonp

    mvc3代码

    实现类

    public class JsonpResult : JsonResult
        {
            public JsonpResult()
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet;
            }
    
            public string Callback { get; set; }
            
            ///<summary>
            ///对操作结果进行处理
            ///</summary>
            ///<paramname="context"></param>
            public override void ExecuteResult(ControllerContext context)
            {
                var httpContext = context.HttpContext;
                var callBack = Callback;
                if (string.IsNullOrWhiteSpace(callBack))
                    callBack = httpContext.Request["callback"]; //获得客户端提交的回调函数名称
                // 返回客户端定义的回调函数
                var js = new System.Web.Script.Serialization.JavaScriptSerializer();
                httpContext.Response.Write(callBack + "(");
                httpContext.Response.Write(js.Serialize(Data));  //Data 是服务器返回的数据
                httpContext.Response.Write(");");            //将函数输出给客户端,由客户端执行
            }
        }
    
        /// <summary>
        /// jsonp扩展方法
        /// </summary>
        public static class ContollerExtensions
        {
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="controller"></param>
            /// <param name="data"></param>
            /// <returns></returns>
            public static JsonpResult Jsonp<T>(this Controller controller, T data)
            {
                JsonpResult result = new JsonpResult()
                {
                    Data = data,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
                return result;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="controller"></param>
            /// <param name="data"></param>
            /// <param name="callback">更改后的回调函数名</param>
            /// <returns></returns>
            public static JsonpResult Jsonp<T>(this Controller controller, T data,string callback)
            {
                JsonpResult result = new JsonpResult()
                {
                    Callback=callback,
                    Data = data,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
                return result;
            }
        }
    View Code

    控制器

    /// <summary>
            /// 
            /// </summary>
            /// <param name="parameters">传入参数</param>
            /// <returns></returns>
            public ActionResult Jump(string parameters)
            {
                //以下返回方式都可以,在客户端接收json格式数据
                return this.Jsonp("");
                return this.Jsonp(new { success = true, message = "" });
                return this.Jsonp<类名>(类对象);
                return this.Jsonp(类对象);
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="parameters"></param>
            /// <param name="updatecallback">更改后的回调函数名</param>
            /// <returns></returns>
            public ActionResult Jump(string parameters, string updatecallback)
            {
                //以下返回方式都可以,在客户端接收json格式数据
                return this.Jsonp("", updatecallback);
                return this.Jsonp(new { success = true, message = "" }, updatecallback);
                return this.Jsonp<类名>(类对象, updatecallback);
                return this.Jsonp(类对象, updatecallback);
            }
    View Code

    客户端ajax

    $.ajax({
                type: "GET",
                url: 请求地址,
                data:请求数据,
                dataType: "jsonp",    //必须注明数据格式是jsonp
                success: function (result) {
                    alert(result.message);
                }
            });
    
    
    
    $.ajax({
                type: "GET",
               url: 请求地址,
                data:请求数据,
                dataType: "jsonp",    //必须注明数据格式是jsonp
                jsonp: "updatecallback",  //修改回调函数名称           
                success: function (result) {
                    alert(result.message);
                }
            }
    View Code

    end

  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/fengmazi/p/4313008.html
Copyright © 2011-2022 走看看