麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

完美解決AJAX跨域問題

2019-11-20 21:48:27
字體:
來源:轉載
供稿:網友

從AJAX誕生那天起,XMLHttprequest對象不能跨域請求的問題就一直存在。這似乎是一個很經典的問題了。是由于javascript的同源策略(這里不作深入探討)所導致。

解決的辦法,大概有如下幾種:

1. 使用中間層過渡的方式(可以理解為“代理”):

中間過渡,很明顯,就是在AJAX與不同域的服務器進行通訊的中間加一層過渡,這一層過渡可以是PHP、JSP、c++等任何具備網絡通訊功能的語言,由中間層向不同域的服務器進行讀取數據的操作。拿asp.net做一個例子,如果需要對不同域的某一個asp.net進行通訊,現在客戶端的xmlhttprequest先query本域的一個asp.net ,然后由本域的這個asp.net去和不同域的asp.net進行通訊,然后由本域的asp.net響應輸出(response);思路大概就是這樣的,相信讀者已經很清楚的理解了。

2. 使用<script>標簽

這個方法是利用<script>標簽中的src來query一個aspx獲得response,因為<script>標簽的src屬性不存在跨域的問題。

舉個例子來讓大家看得更清楚一點吧:

復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Ajax跨域問題</title>
    <script type="text/javascript" src="" id="getAspx">
    </script>
    <script type="text/javascript">
        function get(url) {
            var obj = document.getElementById("getAspx");
            obj.src = url;
            (obj.readStatus == 200)
            {
                alert(responseVal);//如果成功,會彈出Dylan
            }
        }
        function query() {
            get(getDemo.aspx);
        }
    </script>
</head>
<body>
<input type="button" value="Ajax跨域測試" onclick="query();"/>
</body>
</html>

getDemo.aspx后臺代碼:
復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace LearnJS
{
    public partial class getDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("var responseVal='Dylan'");
        }
    }
}


這個方法又叫做ajaj或者ajax without xmlHttprequest,把x換成了j,是因為使用了<script>標簽而沒有用到xml和xmlHttprequest的緣故。這種方法似乎有點“另類”,哈哈。

那現在我們就看看,有了jQuery之后,如何來解決ajax的跨域問題:

復制代碼 代碼如下:

<html>
<head>
<title>JQuery學習</title>
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var oBtnTest = $("#btnTest");
    oBtnTest.click(function(){
        oBtnTest.disabled = true;   
        var oResult = $("#result");
        oResult.html("loading").css("color","red");
        jQuery.getScript("http://www.companysz.com/test/js.txt",
        function(){           
            oResult.html("name:" + Dylan.name + "<br/>email:" + Dylan.email).css("color","black");           
            oBtnTest.disabled = false;           
        });        
    });   
});   
</script>
</head>
<body>
<button id="btnTest">BtnTest</button>
<div id="result"></div>
</body>
</html>

遠程服務器端js.txt中的內容為:
var Dylan= {name:"Dylan",email:[email protected]}

筆者感覺這種方式更加簡潔。呵呵。當然,讀者可以根據實際情況,任意選擇實現方式。

怎么樣,其實很簡單吧,我看到過很多人不愿意去正視ajax所存在的技術瓶頸,其實AJAX更應該是Ajax而不是AJAX,突出第一個A是想強調其實AJAX發揚的是一種異步傳輸的方法,而不是具體到底使用了哪種技術。

其實,在json數據格式之后,有一種更牛X的“jsonp”,也可以實現ajax的跨域通信。其實jsonp不是一種數據格式,只是對我介紹的第二種方式做了改進。從jQuery1.2 版本開始,jQuery 擁有對 JSONP 回調的本地支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av在线免费观看网 | 成人午夜免费在线观看 | 九九视频精品在线 | 永久av在线免费观看 | 一区二区三区欧美在线 | www日韩在线 | 国产精品剧情一区二区在线观看 | 免费一级毛片电影 | 福利一区二区三区视频在线观看 | 色网站免费观看 | 日本人乱人乱亲乱色视频观看 | 羞羞视频在线免费 | 国产在线欧美日韩 | 神马顶级推理片免费看 | 毛片在线视频观看 | 免费毛片观看 | 一级黄色毛片a | 久久成人国产精品入口 | 成人免费久久 | 国产精品99久久久久久久 | 久久蜜桃精品一区二区三区综合网 | 亚洲一级片在线观看 | 国产亚洲精彩视频 | 久久久久一区二区三区四区五区 | 日韩av电影在线观看 | 日本在线播放一区二区三区 | 国产亚洲欧美在线视频 | 国产小视频在线观看 | 国产免费一区二区三区在线能观看 | 亚洲欧美一区二区三区在线观看 | 成人在线观看地址 | 毛片视频网站 | omofun 动漫在线观看 | 99精品视频免费看 | 欧美一级做性受免费大片免费 | 欧美日韩一区,二区,三区,久久精品 | 色婷婷久久一区二区 | 久久免费激情视频 | 成人免费一区二区三区视频网站 | 久久精品79国产精品 | 欧美精品在线免费观看 |