leisure

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

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

          什么情況下才會出現(xiàn)跨域
          假設域名是: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的內(nèi)容,注意必須進行同域處理后方可訪問!
                              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格式數(shù)據(jù) test({"id": "3", "name": "leisure"}); test函數(shù)名為callback參數(shù)中定義
              $.getJSON(url + "?callback=?", data, function(data) {
              }
              注意callback=?這個參數(shù)必須帶上,jquery會自動生成一個函數(shù)名替換這個問號!jQuery.getJSON實際上是用了JSONP方式實現(xiàn)。
          四、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 閱讀(8052) 評論(1)  編輯  收藏 所屬分類: javascript

          評論

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

          afa
          2014-04-14 15:51 | saf
          主站蜘蛛池模板: 金川县| 盐城市| 晋江市| 安乡县| 军事| 香港| 汪清县| 安康市| 湘潭市| 儋州市| 陆河县| 麟游县| 阜康市| 雷波县| 广东省| 怀宁县| 容城县| 日喀则市| 维西| 石棉县| 潜山县| 白河县| 临颍县| 常熟市| 威宁| 永兴县| 大港区| 茶陵县| 大洼县| 平原县| 广河县| 惠安县| 翁源县| 乐都县| 辽源市| 太湖县| 古田县| 东明县| 华安县| 锡林浩特市| 淮安市|