<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-11  評論-0  文章-0  trackbacks-0
    客戶端“跨域訪問”一直是一個(gè)頭疼的問題,好在有jQuery幫忙,從jQuery-1.2以后跨域問題便迎刃而解。由于自己在項(xiàng)目中遇到跨域問題,借此機(jī)會對跨域問題來刨根問底,查閱了相關(guān)資料和自己的實(shí)踐,算是解決了跨域問題。便記錄下來,以供查閱。 
            jQuery.ajax()支持get方式的跨域,這其實(shí)是采用jsonp的方式來完成的。
            真實(shí)案例:
            $.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í)行這個(gè)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ā)
                    //請求出錯(cuò)處理 
                    alert("請求出錯(cuò)(請檢查相關(guān)度網(wǎng)絡(luò)狀況.)"); 
                } 
            });

            注意:
            $.getJSON(" http://www.mysite.com/demo.do?name1="+value1+"&callback=?", 
                function(json){ 
                    if(json.屬性名==值){ 
                        // 執(zhí)行代碼 
                    } 
            }); 
        這種方式其實(shí)是上例$.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)用這個(gè):jsonp32440980(json數(shù)組);
        這樣就達(dá)到了跨域數(shù)據(jù)交換的目的. 
        jsonp的最基本的原理是:動態(tài)添加一個(gè)是一致的(qq空間就是大量采用這種方式來實(shí)現(xiàn)跨域數(shù)據(jù)交換的) 。JSONP是一種腳本注入(Script Injection)行為,所以也有一定的安全隱患。
        注意:jquey是不支持post方式跨域的。
        這是因?yàn)殡m然采用post +動態(tài)生成iframe是可以達(dá)到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是一個(gè)比較極端的方式,不建議采用。也可以說get方式的跨域是合法的,post方式從安全角度上被認(rèn)為是不合法的,萬不得已還是不要post,client端跨域訪問的需求看來也引起w3c的注意了,看資料說html5 WebSocket標(biāo)準(zhǔn)支持跨域的數(shù)據(jù)交換,應(yīng)該也是一個(gè)將來可選的跨域數(shù)據(jù)交換的解決方案。
    參考:http://www.jb51.net/article/21213.htm

    posted on 2010-09-29 11:27 王健 閱讀(150) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产成人精品免费大全| 国产偷国产偷亚洲高清日韩| 亚洲av无码一区二区三区四区| 四虎永久成人免费影院域名| 中文在线免费观看| 亚洲一欧洲中文字幕在线| 免费国产真实迷j在线观看| 国产免费网站看v片在线| 久久亚洲最大成人网4438| 亚洲黄黄黄网站在线观看| 91九色老熟女免费资源站| 美女一级毛片免费观看| 日韩亚洲AV无码一区二区不卡| 巨胸喷奶水视频www网免费| a级毛片免费全部播放无码| 亚洲中文字幕久久精品蜜桃| 色久悠悠婷婷综合在线亚洲| 歪歪漫画在线观看官网免费阅读| 精品免费久久久久国产一区 | 黄色网址免费大全| 免费高清A级毛片在线播放| 在线免费观看亚洲| 亚洲午夜AV无码专区在线播放| 免费在线看v网址| 精品成人免费自拍视频| 亚洲av无码一区二区三区人妖| 亚洲自偷自偷精品| 久久亚洲中文字幕精品一区| 在线免费视频一区| 亚洲网站在线免费观看| 国产免费A∨在线播放| 成人亚洲国产精品久久| 亚洲中文字幕一二三四区苍井空| 亚洲精品乱码久久久久久| 亚洲成aⅴ人片久青草影院| 国产h视频在线观看免费| 最近中文字幕大全中文字幕免费| 精品一区二区三区高清免费观看| 国产在亚洲线视频观看| 亚洲中文字幕无码爆乳| 亚洲视频网站在线观看|