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

  • 相关阅读:
    [错误处理]UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
    [已解决]使用 apt-get update 命令提示 ...中被配置了多次
    linux各种版本查看方法
    [Pandas技巧] 如何把pandas dataframe对象或series对象转换成list
    linux下终止相关操作
    [错误处理]Vim卡死,无法输入是怎么回事?是不是按了Ctrl+S
    批量修改文件名称方法
    pycharm配置 自动运行指定脚本
    pip安装超时,更换国内镜像源安装
    命令行特殊字符名字转义
  • 原文地址:https://www.cnblogs.com/fengmazi/p/4313008.html
Copyright © 2011-2022 走看看