二級(jí)考試java輔導(dǎo):AJAX跨域問(wèn)題的解決辦法

字號(hào):

內(nèi)部的architecture組正在熱烈討論AJAX,最后難免會(huì)談到如何跨域這個(gè)問(wèn)題,因?yàn)閺腁JAX誕生那天起,XMLHttprequest對(duì)象在firefox下不能跨域請(qǐng)求的問(wèn)題就一直存在,等待瀏覽器們?nèi)ソ鉀Q這個(gè)問(wèn)題顯然不太現(xiàn)實(shí),聰明的Web開發(fā)人員們?cè)缇拖肓艘幌盗械姆椒▉?lái)解決這個(gè)問(wèn)題,下面列舉兩個(gè)比較不錯(cuò)的方法:
    1. 使用中間層過(guò)渡的方式:
    中間過(guò)渡,很明顯,就是在AJAX與不同域的服務(wù)器進(jìn)行通訊的中間加一層過(guò)渡,這一層過(guò)渡可以是PHP、JSP、c++等任何具備網(wǎng)絡(luò)通訊功能的語(yǔ)言,由中間層向不同域的服務(wù)器進(jìn)行讀取數(shù)據(jù)的操作。拿PHP做一個(gè)例子,如果需要對(duì)不同域的某一個(gè)php進(jìn)行通訊,現(xiàn)在客戶端的xmlhttprequest先query本域的一個(gè)PHP,然后由本域的這個(gè)PHP去和不同域的PHP進(jìn)行通訊,然后由本域的PHP輸出response;
    2. 使用<script>標(biāo)簽
    這個(gè)方法是利用<script>標(biāo)簽中的src來(lái)query一個(gè)PHP獲得response,因?yàn)椋約cript>標(biāo)簽的src屬性不存在跨域的問(wèn)題。
    舉個(gè)例子來(lái)讓大家看得更清楚一點(diǎn)吧:
    <script LANGUAGE="Javascript" src="" id="get">
    </script>
    <script LANGUAGE="Javascript">
    <!--
    function get(url)
    {
    var obj = document.getElementById("get");
    obj.src = url;
    (obj.readStatus == 200)
    {
    alert(param);
    }
    }
    function query()
    {
    get(get.php);
    }
    //-->
    </script>
    <BODY>
    <INPUT TYPE="button" value="CLICK ME" onclick="query()">
    </BODY>
    </HTML>
    其中g(shù)et.php的代碼是:
    <?php
    echo "var param = ’www.achome.cn’";
    ?>
    最后的運(yùn)行結(jié)果是,當(dāng)你點(diǎn)擊那個(gè)button,它會(huì)出現(xiàn)一個(gè)內(nèi)容為”www.achome.cn”的對(duì)話框。
    這個(gè)方法又叫做ajaj或者ajax without xmlHttprequest,把x換成了j,是因?yàn)槭褂昧耍約cript>標(biāo)簽而沒(méi)有用到xml和xmlHttprequest的緣故。
    怎么樣,很簡(jiǎn)單吧,我看到過(guò)很多人不愿意去正視ajax所存在的技術(shù)瓶頸,其實(shí)AJAX更應(yīng)該是Ajax而不是AJAX,突出第一個(gè)A是想強(qiáng)調(diào)其實(shí)AJAX發(fā)揚(yáng)的是一種異步傳輸?shù)姆椒?,而不是具體到底使用了哪種技術(shù)。