一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ASP.NET MVC 實(shí)現(xiàn) AJAX 跨域請(qǐng)求

 ThinkTank_引擎 2016-09-14

ASP.NET MVC 實(shí)現(xiàn)AJAX跨域請(qǐng)求的兩種方法

通常發(fā)送AJAX請(qǐng)求都是在本域內(nèi)完成的,也就是向本域內(nèi)的某個(gè)URL發(fā)送請(qǐng)求,完成部分頁(yè)面的刷新。但有的時(shí)候需要向其它域發(fā)送AJAX請(qǐng)求,完成數(shù)據(jù)的加載,例如Google。

    在ASP.NET MVC 框架里實(shí)現(xiàn)跨域的AJAX請(qǐng)求有幾種方式可以實(shí)現(xiàn),以下就介紹常用的兩種方法。

1.     發(fā)送JSONP請(qǐng)求

客戶端:

jQuery對(duì)發(fā)送JSONP請(qǐng)求有很好的支持,客戶端通過(guò). ajax() 函數(shù)發(fā)送請(qǐng)求,其中需要制定 dataType 為“jsonp”  jsonpCallback 為指定的回調(diào)函數(shù)名(如  “UpdateDiv),也就是客戶端需要定義一個(gè)UpdateDiv 函數(shù),當(dāng)請(qǐng)求成功后會(huì)自動(dòng)調(diào)用該函數(shù)。

服務(wù)器:

ASP.NET MVC沒有內(nèi)置對(duì) JSONP 請(qǐng)求的支持,不過(guò)使用 JsonResult 可以很方便的實(shí)現(xiàn)。我們只需要定義一個(gè)類(如 JsonpResult)繼承自JsonResult,并重寫 ExecuteResult()方法,在輸出數(shù)據(jù)時(shí),調(diào)用客戶端定義的那個(gè)回調(diào)函數(shù)(這個(gè)函數(shù)必須是存在的,并且必須是全局和唯一的)。需要注意的是,在自定義的JsonpResult 里,需要設(shè)置 JsonRequestBehavior 為 AllowGet,否則會(huì)出錯(cuò),因?yàn)?JSONP 請(qǐng)求必須是 Get 方式提交的。

 

代碼:

          客戶端:

 

<scripttype="text/JavaScript">


            functionUpdateDiv(result) {

                $("#div1").html(result.ID +result.Name);

            }

 

        $(function() {

            $(".btn").click(function () {          

                $.ajax({

                   type: "GET",

                   url:"http://localhost:50863/Home/Index2",    //跨域url

                   dataType: "jsonp",  //指定 jsonp 請(qǐng)求

                   jsonpCallback: "UpdateDiv" // 指定回調(diào)函數(shù)

                });

            })

        })

 

</script>

 

服務(wù)端:

    public class JSONPResult :JsonResult

    {

        public JSONPResult()

       {

          JsonRequestBehavior=JsonRequestBehavior.AllowGet;

       }

 

        public string Callback{get;set;}      

 

        ///<summary>

        ///對(duì)操作結(jié)果進(jìn)行處理

        ///</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"]; //獲得客戶端提交的回調(diào)函數(shù)名稱

           

            // 返回客戶端定義的回調(diào)函數(shù)

            httpContext.Response.Write(callBack +"(");

            httpContext.Response.Write(Data);          //Data 是服務(wù)器返回的數(shù)據(jù)        

             httpContext.Response.Write(");");            //將函數(shù)輸出給客戶端,由客戶端執(zhí)行

        }

 

}

          //操作器和其它操作沒什么區(qū)別,只是返回值是JsopnpResult結(jié)果

         public ActionResult Index2()

        {

            var str = "{ID :'123', Name : 'asdsa' }";

            return new JSONPResult{Data = str };  //返回 jsonp 數(shù)據(jù),輸出回調(diào)函數(shù)

        }

 

2.    跨域資源共享

相比 JSONP 請(qǐng)求,跨域資源共享要簡(jiǎn)單許多,也是實(shí)現(xiàn)跨域 AJAX 請(qǐng)求的首選。

客戶端:

    客戶端不在發(fā)送 JSONP 類型的請(qǐng)求,只需要發(fā)送普通的 JSON 請(qǐng)求即可,也不用定義回調(diào)函數(shù),用 .success 即可。

服務(wù)端:

     服務(wù)端也很簡(jiǎn)單,操作結(jié)果還是返回普通的操作結(jié)果就可以,唯一要指定的是 HTTP 報(bào)文頭部的Access-Control-Allow-Origi

指定為 “*” 即可,表示該輸出允許跨域?qū)崿F(xiàn)。

       跨域資源共享可以很方便的實(shí)現(xiàn),不過(guò)在 IE9 還沒有對(duì)該技術(shù)的支持,F(xiàn)ireFox 就已經(jīng)支持了。

 

代碼:

客戶端:

<scripttype="text/javascript">

        $(function() {

            $(".btn").click(function (){

                $.ajax({

                    type:"GET",

                    url:"http://localhost:50863/Home/Index3"//跨域URL

                    dataType:"json"

                    success:function (result){

                        $("#div1").html(result.ID +result.Name);

                    },

                    error:function (XMLHttpRequest, textStatus,errorThrown) {                       

                        alert(errorThrown); // 調(diào)用本次AJAX請(qǐng)求時(shí)傳遞的options參數(shù)

                    }

                });

            })

        })

    </script>

 

服務(wù)端:

 

        ///<summary>

        ///跨站資源共享實(shí)現(xiàn)跨站AJAX請(qǐng)求

        ///</summary>

        ///<returns></returns>

        public ActionResult Index3()

        {

            var str = new { ID="123", Name= "asdsa" };

            HttpContext.Response.AppendHeader("Access-Control-Allow-Origin","*");

            return Json(str, JsonRequestBehavior.AllowGet);

        }

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲中文字幕亲近伦片| 男生和女生哪个更好色| 精品国产亚洲av成人一区| 日本理论片午夜在线观看| 日韩精品一区二区三区射精| 国产肥女老熟女激情视频一区| 人人爽夜夜爽夜夜爽精品视频| 在线观看视频成人午夜| 高清一区二区三区四区五区| 人妻一区二区三区在线| 国产精品九九九一区二区 | 狠狠做五月深爱婷婷综合| 日韩精品成区中文字幕| 高中女厕偷拍一区二区三区| 日韩一级免费中文字幕视频 | 日本女人亚洲国产性高潮视频| 国产精品乱子伦一区二区三区| 青青操日老女人的穴穴 | 国产乱淫av一区二区三区| 欧美一级黄片免费视频| 日本一本不卡免费视频| 国产日韩欧美在线亚洲| 国产乱人伦精品一区二区三区四区 | 国产无摭挡又爽又色又刺激| 色综合久久中文综合网| 亚洲男人天堂网在线视频| 欧美日韩一级aa大片| 日本二区三区在线播放| 精品国产亚洲一区二区三区| 粗暴蹂躏中文一区二区三区| 中文字幕免费观看亚洲视频| 91人妻久久精品一区二区三区| 亚洲国产精品久久琪琪| 超薄肉色丝袜脚一区二区| 东北老熟妇全程露脸被内射| 欧洲一区二区三区自拍天堂| 国产成人精品在线一区二区三区| 人体偷拍一区二区三区| 国产日韩在线一二三区| 狠狠干狠狠操在线播放| 美女被啪的视频在线观看|