最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

jquery解決客戶端跨域訪問問題

 更新時間:2015年01月06日 09:40:03   投稿:hebedich  
這篇文章主要介紹了jquery解決客戶端跨域訪問問題,jQuery.ajax()支持get方式的跨域,這其實是采用jsonp的方式來完成的,需要的朋友可以參考下

客戶端“跨域訪問”一直是一個頭疼的問題,好在有jQuery幫忙,從jQuery-1.2以后跨域問題便迎刃而解。由于自己在項目中遇到跨域問題,借此機會對跨域問題來刨根問底,查閱了相關(guān)資料和自己的實踐,算是解決了跨域問題。便記錄下來,以供查閱。

 jQuery.ajax()支持get方式的跨域,這其實是采用jsonp的方式來完成的。

 真實案例:

復(fù)制代碼 代碼如下:
 
 $.ajax({
            async:false,
            url: 'http://www.mysite.com/demo.do',  // 跨域URL
            type: 'GET',
            dataType: 'jsonp',
            jsonp: 'jsoncallback', //默認(rèn)callback
            data: mydata,
            timeout: 5000,
            beforeSend: function(){  //jsonp 方式此方法不被觸發(fā)。原因可能是dataType如果指定為jsonp的話,就已經(jīng)不是ajax事件了
            },
            success: function (json) { //客戶端jquery預(yù)先定義好的callback函數(shù),成功獲取跨域服務(wù)器上的json數(shù)據(jù)后,會動態(tài)執(zhí)行這個callback函數(shù)
                if(json.actionErrors.length!=0){
                    alert(json.actionErrors);
                }
                genDynamicContent(qsData,type,json);
            },
            complete: function(XMLHttpRequest, textStatus){
                $.unblockUI({ fadeOut: 10 });
            },
            error: function(xhr){
                //jsonp 方式此方法不被觸發(fā)
                //請求出錯處理
                alert("請求出錯(請檢查相關(guān)度網(wǎng)絡(luò)狀況.)");
            }
        });

        注意:

復(fù)制代碼 代碼如下:

    這種方式其實是上例$.ajax({..}) api的一種高級封裝,有些$.ajax api底層的參數(shù)就被封裝而不可見了。

    在服務(wù)端通過callback= request.getParameter("callback") 得到j(luò)Query端隨后要回調(diào)的jsonp32440980
    然后返回類似:"jsonp32440980("+要返回的json數(shù)組+")";
    jquery就會通過回調(diào)方法動態(tài)加載調(diào)用這個:jsonp32440980(json數(shù)組);
    這樣就達(dá)到了跨域數(shù)據(jù)交換的目的.
    jsonp的最基本的原理是:動態(tài)添加一個是一致的(qq空間就是大量采用這種方式來實現(xiàn)跨域數(shù)據(jù)交換的) 。JSONP是一種腳本注入(Script Injection)行為,所以也有一定的安全隱患。

    注意:jquey是不支持post方式跨域的。
    這是因為雖然采用post +動態(tài)生成iframe是可以達(dá)到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是一個比較極端的方式,不建議采用。也可以說get方式的跨域是合法的,post方式從安全角度上被認(rèn)為是不合法的,萬不得已還是不要post,client端跨域訪問的需求看來也引起w3c的注意了,看資料說html5 WebSocket標(biāo)準(zhǔn)支持跨域的數(shù)據(jù)交換,應(yīng)該也是一個將來可選的跨域數(shù)據(jù)交換的解決方案。

相關(guān)文章

最新評論

堆龙德庆县| 乐清市| 德庆县| 肥乡县| 呈贡县| 阿坝| 合肥市| 东乡| 漳平市| 崇信县| 新宾| 辽中县| 谢通门县| 忻城县| 大渡口区| 湘阴县| 揭东县| 广元市| 尼勒克县| 芮城县| 定州市| 城步| 东山县| 泰宁县| 和顺县| 安徽省| 沧源| 云龙县| 新化县| 成都市| 耿马| 石景山区| 黎平县| 大洼县| 巨野县| 冷水江市| 杂多县| 天台县| 微山县| 临洮县| 土默特右旗|