leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0
          數據加載中……

          Javascript跨域請求的幾種解決方法

          什么情況下才會出現跨域
          假設域名是:http://www.example.com.cn/
          如果所請求的域名跟這個域名不致,這種情況就是跨域,由于跨域存在漏洞,所以一般來說正常的跨域請求方式是請求不到的。
          解決方式
          一、window.name
              1、 服務器返回
          <script>window.name='{"id":"3", "name":"leisure"}';</script>
              2、定義一個iframe,添加onload事件 <iframe id="iframe1" onload="iLoad"><iframe>
              <script type="text/javascript">
                  var load = false;
                      function iLoad() {
                          if(load == false) {
                              // 同域處理,請求后會再次重新加載iframe
                              document.getElementById('iframe1').contentWindow.location = '/';         
                              load = true;
                          } else {
                              // 獲取window.name的內容,注意必須進行同域處理后方可訪問!
                              var data = document.getElementById('iframe1').contentWindow.name;
                              alert(data);  // {"id":"3", "name":"leisure"}
                              load = false;
                          }
                  }
              </script>
              3、定義一個form,設置form的target為iframe的id,然后提交form
              <form  action="url" method="POST" target="iframe1">
                    <button type="submit" value="submit" />
              </form>
          二、JSONP
              服務器返回 callback({"id": "3", "name": "leisure"});
              <script type="text/javascript">
                  function callback(data) {
                      alert(data);
                  }
              </script>
              <script type="text/javascript" src="http://www.example.com.cn/product.jsp?id=5&jsonp=callback"></script>
          三、jQuery.getJSON
              服務器返回 json格式數據 test({"id": "3", "name": "leisure"}); test函數名為callback參數中定義
              $.getJSON(url + "?callback=?", data, function(data) {
              }
              注意callback=?這個參數必須帶上,jquery會自動生成一個函數名替換這個問號!jQuery.getJSON實際上是用了JSONP方式實現。
          四、flash跨域
              服務器添加crossdomain.xml
              http://www.example.com.cn/crossdomain.xml
              <?xml version="1.0"?>
              
          <cross-domain-policy>
                  
          <allow-access-from domain="*.another.com.cn" />
              
          </cross-domain-policy>

          posted on 2011-09-29 22:57 leisure 閱讀(8047) 評論(1)  編輯  收藏 所屬分類: javascript

          評論

          # re: Javascript跨域請求的幾種解決方法  回復  更多評論   

          afa
          2014-04-14 15:51 | saf
          主站蜘蛛池模板: 祥云县| 内江市| 铜梁县| 郓城县| 改则县| 伊春市| 扬中市| 论坛| 山阳县| 沂源县| 桓台县| 滦平县| 宝兴县| 宁陵县| 中西区| 湘乡市| 农安县| 天柱县| 亳州市| 盐亭县| 临西县| 潜山县| 崇左市| 弥勒县| 南投县| 达拉特旗| 玉溪市| 自贡市| 门源| 温泉县| 乌鲁木齐市| 瑞金市| 蛟河市| 通化市| 曲沃县| 弥勒县| 临海市| 苏尼特右旗| 西青区| 建始县| 鸡泽县|