<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 189,comments - 115,trackbacks - 0
    URL
    http://book.devworld.cn/book/5


    ?
    快速業(yè)務(wù)開發(fā)平臺+在線自定義WEB報表平臺+多級數(shù)據(jù)上報解決方案

    2006年10月18日
    ?MEYEGG
    ?退出

    [?當(dāng)前在線:1141,本次峰值:1179?]

    首頁 | 動態(tài) | 文章 | FAQ? | 新聞 | 下載 | 代碼 | 工作 | 調(diào)查 | 術(shù)語 | 站點(diǎn) | 圖書 | 論壇 | 幫助 | 全部??

    [?在線用戶:103,今日總量:29896?]

    TOP | 交流 | 軟件 | 專欄 | 開源 | 譯/著 | 源碼 | API? | 推薦 | FTP? | 積分 | 統(tǒng)計 | 搜索 | Blog | 我們??
    首頁 ? 研究文集 ? J2EE綜合評論此文章?發(fā)表評論??開始監(jiān)控此文章 ?開始監(jiān)控 ??加入收藏夾 ?加入收藏夾
    AJAX基礎(chǔ)教程
    snowsea 轉(zhuǎn)貼? (參與分:16550,專家分:1160)?? 發(fā)表:2006-04-23 14:53 ??版本:1.0 ??閱讀:810

      這篇文章將帶您瀏覽整個AJAX的基本概貌,并展示兩個簡單的例子讓您輕松上路.?

      什么是?AJAX??
      AJAX?(異步?JavaScript?和?XML)?是個新產(chǎn)生的術(shù)語,專為描述JavaScript的兩項(xiàng)強(qiáng)大性能.這兩項(xiàng)性能在多年來一直被網(wǎng)絡(luò)開發(fā)者所忽略,直到最近Gmail,?Google?suggest和google?Maps的橫空出世才使人們開始意識到其重要性.?

      這兩項(xiàng)被忽視的性能是:?
      無需重新裝載整個頁面便能向服務(wù)器發(fā)送請求.?
      對XML文檔的解析和處理.

    步驟?1???"請!"?---?如何發(fā)送一個HTTP請求

      為了用JavaScript向服務(wù)器發(fā)送一個HTTP請求,?需要一個具備這種功能的類實(shí)例.?這樣的類首先由Internet?Explorer以ActiveX對象引入,?被稱為XMLHTTP.?后來Mozilla,?Safari?和其他瀏覽器紛紛仿效,?提供了XMLHttpRequest類,它支持微軟的ActiveX對象所提供的方法和屬性.?

      因此,?為了創(chuàng)建一個跨瀏覽器的這樣的類實(shí)例(對象),?可以應(yīng)用如下代碼:?

    if?(window.XMLHttpRequest)?{?//?Mozilla,?Safari,?...
    ????http_request?=?new?XMLHttpRequest();
    }?else?if?(window.ActiveXObject)?{?//?IE
    ????http_request?=?new?ActiveXObject("Microsoft.XMLHTTP");
    }

      (上例對代碼做了一定簡化,這是為了解釋如何創(chuàng)建XMLHTTP類實(shí)例.?實(shí)際的代碼實(shí)例可參閱本篇步驟3.)?

      如果服務(wù)器的響應(yīng)沒有XML?mime-type?header,某些Mozilla瀏覽器可能無法正常工作.?為了解決這個問題,?如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header.?

    http_request?=?new?XMLHttpRequest();
    http_request.overrideMimeType('text/xml');

      接下來要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么.這需要告訴HTTP請求對象用哪一個JavaScript函數(shù)處理這個響應(yīng).可以將對象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:?

    http_request.onreadystatechange?=?nameOfTheFunction;?

      注意:在函數(shù)名后沒有括號,也無需傳遞參數(shù).另外還有一種方法,可以在扉頁(fly)中定義函數(shù)及其對響應(yīng)要采取的行為,如下所示:?

    http_request.onreadystatechange?=?function(){
    ????//?do?the?thing
    };

      在定義了如何處理響應(yīng)后,就要發(fā)送請求了.可以調(diào)用HTTP請求類的open()和send()方法,?如下所示:?

    http_request.open('GET',?'http://www.example.org/some.file',?true);
    http_request.send(null);

      open()的第一個參數(shù)是HTTP請求方式???GET,?POST,?HEAD?或任何服務(wù)器所支持的您想調(diào)用的方式.?按照HTTP規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無法處理請求.有關(guān)HTTP請求方法的詳細(xì)信息可參考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html?W3C?specs?
      第二個參數(shù)是請求頁面的URL.由于自身安全特性的限制,該頁面不能為第三方域名的頁面.同時一定要保證在所有的頁面中都使用準(zhǔn)確的域名,否則調(diào)用open()會得到"permission?denied"的錯誤提示.一個常見的錯誤是訪問站點(diǎn)時使用domain.tld,而當(dāng)請求頁面時,卻使用www.domain.tld.?
      第三個參數(shù)設(shè)置請求是否為異步模式.如果是TRUE,?JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng).這就是"AJAX"中的"A".?
      如果第一個參數(shù)是"POST",send()方法的參數(shù)可以是任何想送給服務(wù)器的數(shù)據(jù).?這時數(shù)據(jù)要以字符串的形式送給服務(wù)器,如下所示:?

    name=value&anothername=othervalue&so=on?


    步驟?2???"收到!"?---?處理服務(wù)器的響應(yīng)?

      當(dāng)發(fā)送請求時,要提供指定處理響應(yīng)的JavaScript函數(shù)名.?

    http_request.onreadystatechange?=?nameOfTheFunction;?

      我們來看看這個函數(shù)的功能是什么.首先函數(shù)會檢查請求的狀態(tài).如果狀態(tài)值是4,就意味著一個完整的服務(wù)器響應(yīng)已經(jīng)收到了,您將可以處理該響應(yīng).?

    if?(http_request.readyState?==?4)?{
    ????//?everything?is?good,?the?response?is?received
    }?else?{
    ????//?still?not?ready
    }

      readyState的取值如下:?
      0?(未初始化)?
      1?(正在裝載)?
      2?(裝載完畢)?
      3?(交互中)?
      4?(完成)?

      接著,函數(shù)會檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值.?完整的狀態(tài)取值可參見?W3C?site.?我們著重看值為200?OK的響應(yīng).?

    if?(http_request.status?==?200)?{
    ????//?perfect!
    }?else?{
    ????//?there?was?a?problem?with?the?request,
    ????//?for?example?the?response?may?be?a?404?(Not?Found)
    ????//?or?500?(Internal?Server?Error)?response?codes
    }

      在檢查完請求的狀態(tài)值和響應(yīng)的HTTP狀態(tài)值后,?您就可以處理從服務(wù)器得到的數(shù)據(jù)了.有兩種方式可以得到這些數(shù)據(jù):?

    http_request.responseText???以文本字符串的方式返回服務(wù)器的響應(yīng)?
    http_request.responseXML???以XMLDocument對象方式返回響應(yīng).處理XMLDocument對象可以用JavaScript?DOM函數(shù)?


    步驟?3???"萬事俱備!"?-?簡單實(shí)例

      我們現(xiàn)在將整個過程完整地做一次,發(fā)送一個簡單的HTTP請求.?我們用JavaScript請求一個HTML文件,?test.html,?文件的文本內(nèi)容為"I'm?a?test.".然后我們"alert()"test.html文件的內(nèi)容.?

    <script?type="text/javascript"?language="javascript">
    ????var?http_request?=?false;
    ????function?makeRequest(url)?{

    ????????http_request?=?false;

    ????????if?(window.XMLHttpRequest)?{?//?Mozilla,?Safari,...
    ????????????http_request?=?new?XMLHttpRequest();
    ????????????if?(http_request.overrideMimeType)?{
    ????????????????http_request.overrideMimeType('text/xml');
    ????????????}
    ????????}?else?if?(window.ActiveXObject)?{?//?IE
    ????????????try?{
    ????????????????http_request?=?new?ActiveXObject("Msxml2.XMLHTTP");
    ????????????}?catch?(e)?{
    ????????????????try?{
    ????????????????????http_request?=?new?ActiveXObject("Microsoft.XMLHTTP");
    ????????????????}?catch?(e)?{}
    ????????????}
    ????????}

    ????????if?(!http_request)?{
    ????????????alert('Giving?up?:(?Cannot?create?an?XMLHTTP?instance');
    ????????????return?false;
    ????????}
    ????????http_request.onreadystatechange?=?alertContents;
    ????????http_request.open('GET',?url,?true);
    ????????http_request.send(null);

    ????}

    ????function?alertContents()?{

    ????????if?(http_request.readyState?==?4)?{
    ????????????if?(http_request.status?==?200)?{
    ????????????????alert(http_request.responseText);
    ????????????}?else?{
    ????????????????alert('There?was?a?problem?with?the?request.');
    ????????????}
    ????????}

    ????}
    </script>
    <span
    ????style="cursor:?pointer;?text-decoration:?underline"
    ????onclick="makeRequest('test.html')">
    ????????Make?a?request
    </span>


      本例中:?
      用戶點(diǎn)擊瀏覽器上的"請求"鏈接;?
      接著函數(shù)makeRequest()將被調(diào)用.其參數(shù)???HTML文件test.html在同一目錄下;?
      這樣就發(fā)起了一個請求.onreadystatechange的執(zhí)行結(jié)果會被傳送給alertContents();?
      alertContents()將檢查服務(wù)器的響應(yīng)是否成功地收到,如果是,就會"alert()"test.html文件的內(nèi)容.?

    步驟?4???"X-文檔"?---?處理XML響應(yīng)

      在前面的例子中,當(dāng)服務(wù)器對HTTP請求的響應(yīng)被收到后,我們會調(diào)用請求對象的reponseText屬性.該屬性包含了test.html文件的內(nèi)容.現(xiàn)在我們來試試responseXML屬性.?

      首先,我們新建一個有效的XML文件,后面我們將使用這個文件.該文件(test.xml)源代碼如下所示:?

    <?xml?version="1.0"??>
    <root>
    ????I'm?a?test.
    </root>

      在該腳本中,我們只需修改請求部分:?

    ...
    onclick="makeRequest('test.xml')">
    ...

      接著,在alertContents()中,我們將alert()的代碼alert(http_request.responseText);換成:?

      var?xmldoc?=?http_request.responseXML;
      var?root_node?=?xmldoc.getElementsByTagName('root').item(0);
      alert(root_node.firstChild.data);



      這里,我們使用了responseXML提供的XMLDocument對象并用DOM方法獲取存于XML文件中的內(nèi)容.?

    版權(quán)聲明
    本篇文章對您是否有幫助???投票: ??? ????投票結(jié)果:?? ??9???????1
    作者其它文章: 作者全部文章
    Topic: Thinking?in?AJAX?--?基于AJAX的WEB設(shè)計上一篇文章
    返回文章列表返回〔J2EE綜合〕
    下一篇文章Topic: 怎樣使用AJAX進(jìn)行WEB應(yīng)用程序開發(fā)

    文字廣告鏈接
    ???????自主、快速定制基于JAVA的B/S業(yè)務(wù)系統(tǒng)????????重量級企業(yè)在線自定義WEB報表平臺
    ???????數(shù)巨報表: 全程圖形化設(shè)計無須代碼,適合J2EE、ASP及.NET等環(huán)境,功能強(qiáng)大的Web報表工具
    ???????http://www.maxatx.com/
    ???????上海網(wǎng)域網(wǎng):上海、香港、美國服務(wù)器租用 服務(wù)器托管專家

    關(guān)于 JR? |? 版權(quán)聲明? |? 聯(lián)系我們?

    ?2002-2006?JR?版權(quán)所有 滬ICP備05019622號??

    posted on 2006-10-18 11:47 MEYE 閱讀(372) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲AV永久无码精品一福利| 亚洲人成网站在线观看播放| 丁香花免费完整高清观看| 性xxxx视频免费播放直播| 免费精品一区二区三区第35 | 香蕉视频在线观看亚洲| 国产AV无码专区亚洲Av| 亚洲αv在线精品糸列| 亚洲AV无码成人精品区天堂| 国产偷v国产偷v亚洲高清| 国产亚洲精品自在久久| 国产亚洲精品岁国产微拍精品| 国产亚洲成AV人片在线观黄桃 | 成人奭片免费观看| 99久久免费国产精品特黄 | 中文在线免费不卡视频| a毛片视频免费观看影院| 暖暖日本免费中文字幕| 91在线手机精品免费观看| **aaaaa毛片免费同男同女| 精品免费人成视频app| 黄页免费的网站勿入免费直接进入| 国色精品卡一卡2卡3卡4卡免费| 毛片在线免费视频| 国产一区二区三区无码免费| 亚洲国产主播精品极品网红| 国产精品亚洲玖玖玖在线观看| 亚洲真人无码永久在线| 亚洲av成人无码久久精品| 亚洲精品午夜在线观看| 亚洲国产AV一区二区三区四区 | 亚洲性69影院在线观看| 亚洲视频在线观看2018| 国产精品日本亚洲777| 国产男女爽爽爽免费视频| 午夜精品一区二区三区免费视频| 我们的2018在线观看免费高清| 国产大片91精品免费观看男同 | 日韩精品视频免费网址| 亚洲精品视频在线观看你懂的| 亚洲V无码一区二区三区四区观看|