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

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

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

    Java進行時
          把握現在,成就未來!
    posts - 23,comments - 30,trackbacks - 0

            客戶端“跨域訪問”一直是一個頭疼的問題,好在有jQuery幫忙,從jQuery-1.2以后跨域問題便迎刃而解。由于自己在項目中遇到跨域問題,借此機會對跨域問題來刨根問底,查閱了相關資料和自己的實踐,算是解決了跨域問題。便記錄下來,以供查閱。 
            jQuery.ajax()支持get方式的跨域,這其實是采用jsonp的方式來完成的。
            真實案例:
            $.ajax({ 
                async:false, 
                url: 'http://www.mysite.com/demo.do',  // 跨域URL
                type: 'GET', 
                dataType: 'jsonp', 
                jsonp: 'jsoncallback', //默認callback
                data: mydata, 
                timeout: 5000, 
                beforeSend: function(){  //jsonp 方式此方法不被觸發(fā)。原因可能是dataType如果指定為jsonp的話,就已經不是ajax事件了
                },
                success: function (json) { //客戶端jquery預先定義好的callback函數,成功獲取跨域服務器上的json數據后,會動態(tài)執(zhí)行這個callback函數 
                    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("請求出錯(請檢查相關度網絡狀況.)"); 
                } 
            });

            注意:
            $.getJSON(" http://www.mysite.com/demo.do?name1="+value1+"&callback=?", 
                function(json){ 
                    if(json.屬性名==值){ 
                        // 執(zhí)行代碼 
                    } 
            }); 
        這種方式其實是上例$.ajax({..}) api的一種高級封裝,有些$.ajax api底層的參數就被封裝而不可見了。

        在服務端通過callback= request.getParameter("callback") 得到jQuery端隨后要回調的jsonp32440980
        然后返回類似:"jsonp32440980("+要返回的json數組+")"; 
        jquery就會通過回調方法動態(tài)加載調用這個:jsonp32440980(json數組);
        這樣就達到了跨域數據交換的目的. 
        jsonp的最基本的原理是:動態(tài)添加一個是一致的(qq空間就是大量采用這種方式來實現跨域數據交換的) 。JSONP是一種腳本注入(Script Injection)行為,所以也有一定的安全隱患。
        注意:jquey是不支持post方式跨域的。
        這是因為雖然采用post +動態(tài)生成iframe是可以達到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是一個比較極端的方式,不建議采用。也可以說get方式的跨域是合法的,post方式從安全角度上被認為是不合法的,萬不得已還是不要post,client端跨域訪問的需求看來也引起w3c的注意了,看資料說html5 WebSocket標準支持跨域的數據交換,應該也是一個將來可選的跨域數據交換的解決方案。
    參考:http://www.jb51.net/article/21213.htm

    posted on 2010-01-11 16:10 biiau 閱讀(18807) 評論(2)  編輯  收藏

    FeedBack:
    # re: jquery跨域訪問解決方案
    2014-04-10 12:44 | 黃鈴木
    請問請求的webservice返回xml怎么設置  回復  更多評論
      
    # re: jquery跨域訪問解決方案
    2014-09-24 14:32 | 按時發(fā)放
    sdgwegwgh  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产无套无码av电影| 中字幕视频在线永久在线观看免费| 永久免费av无码网站大全| 亚洲精品视频在线播放| 国产精品免费看久久久| 亚洲天堂中文字幕| 99国产精品视频免费观看| 日本亚洲视频在线 | 亚洲最大AV网站在线观看| 精品久久亚洲一级α| 全部免费毛片免费播放| 美女扒开屁股让男人桶爽免费| 日本视频免费在线| 美女被免费视频网站| 久久99亚洲综合精品首页| xxxxxx日本处大片免费看| 亚洲国产精品成人久久| 95老司机免费福利| 久久精品国产亚洲av麻豆图片| 无码中文在线二区免费| 国产综合成人亚洲区| 久久影视国产亚洲| 7m凹凸精品分类大全免费| 亚洲三级视频在线观看| 国产jizzjizz免费看jizz| 两个人日本WWW免费版| 亚洲日本在线免费观看| 成人黄页网站免费观看大全 | 一本久久A久久免费精品不卡| 中文国产成人精品久久亚洲精品AⅤ无码精品| 国产日韩在线视频免费播放| 亚洲精品天天影视综合网| 国产免费毛不卡片| 免费国产黄网站在线观看动图| 亚洲日韩精品一区二区三区无码| 4399影视免费观看高清直播| 亚洲精品无码日韩国产不卡av| 久久久亚洲精品蜜桃臀| 免费观看美女用震蛋喷水的视频 | 嫩草在线视频www免费看| 91亚洲性爱在线视频|