leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0

          導航

          <2014年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          留言簿

          隨筆分類

          隨筆檔案

          相冊

          搜索

          •  

          最新隨筆

          最新評論

          閱讀排行榜

          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 閱讀(8049) 評論(1)  編輯  收藏 所屬分類: javascript

          評論

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

          afa
          2014-04-14 15:51 | saf
          主站蜘蛛池模板: 紫金县| 泸水县| 郁南县| 黄骅市| 依安县| 罗甸县| 扬中市| 东平县| 孟州市| 元阳县| 彩票| 友谊县| 金山区| 广德县| 彭泽县| 麦盖提县| 延庆县| 北宁市| 杂多县| 康平县| 唐山市| 青铜峡市| 永寿县| 威远县| 尤溪县| 阳原县| 尼木县| 凤山县| 梁山县| 淮南市| 获嘉县| 图片| 辽中县| 临桂县| 永平县| 杭州市| 阳信县| 清远市| 丹凤县| 丰原市| 杨浦区|