AJAX傳參從失敗到成功小結(jié):

          看了AJAX基礎(chǔ)教程,感覺不錯,但是在向服務(wù)器傳遞參數(shù)的時候總是會有讓我感到苦惱的問題,
          比如下面的代碼:
          <SCRIPT type="text/javascript">
          ?? function createXMLHttpRequest(){
          ????? if(window.ActiveXObject){
          ???????? xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");?????
          ????? }else if(window.XMLHttpRequest){
          ???????? xmlHttp = new XMLHttpRequest();
          ????? }
          ?? }
          ?? function startRequest(Sid){
          ????? createXMLHttpRequest();
          ????? xmlHttp.open("GET","/CountServlet?Sid="+Sid,true);
          ????? xmlHttp.send(null);
          ?? }
          </SCRIPT>
          在服務(wù)端的CountServlet的doGet()方法在多次請求之間只會被調(diào)用一次,痛苦!!!(難道是異步的問題...)

          于是我又改了一下xmlHttp的open方法的參數(shù)如下,
          xmlHttp.open("POST","/CountServlet,true)
          xmlHttp.send("Sid="+Sid);
          結(jié)果在服務(wù)器端的doPost()方法在每次請求都會被正常調(diào)用,但是,request.getPrameter("Sid")方法就是怎么也獲得不到參數(shù)Sid,

          在高手的幫助下,我又再次改了代碼,如下:
          xmlHttp.open("POST","/CountServlet?Sid="+Sid,false);
          xmlHttp.send(null);
          嘿,還真的,牙好,胃口就好,入口見效,doPost()方法能正常被調(diào)用,參數(shù)也傳得到,具體是什么原因,我還在學(xué)習(xí)之中...

          8.19日加:
          解決辦法:
          除了高手回復(fù)的方法,還有一種解決辦法就是:
          xmlHttp.open("GET","/CountServlet?Sid="+Sid+"&timeStamp="+new Date().getTime(),false);
          xmlHttp.send(null);
          同樣是解決緩存的問題..

          posted on 2006-08-13 17:36 pear 閱讀(2963) 評論(8)  編輯  收藏 所屬分類: 心得體會
          Comments
          • # re: AJAX傳參從失敗到成功小結(jié):
            xunliyong
            Posted @ 2006-08-14 14:20
            原因就是服務(wù)器每次都是從從相同的緩存中給出返回應(yīng)答導(dǎo)致的,只要加下如下代碼就可以了:
            response.setHeader("Cache-Control", "no-cache");  回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-14 17:27
            那為什么POST方式傳參數(shù)不會有緩存問題呢?@xunliyong
              回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            阿良
            Posted @ 2006-08-15 00:26
            xmlHttp.open("GET","/CountServlet?Sid="+Sid,true);
            你用這樣的方式來打開xmlHttp的話就根本沒用到異步的技術(shù),是同步的,也就是你這樣做就根本不是在用AJAX.至于你失敗的原因,xunliyong已經(jīng)解釋清楚了,要加上句話,讓服務(wù)器端不要緩存,那么就可以得到正確的結(jié)果了.書上也是這樣說的
              回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-15 08:58
            我只是用他來實現(xiàn)當(dāng)用戶點擊“下載”是,讓下載的同時也讓“下載次數(shù)”加1,并且不刷新本頁面,至于“同步”我也能接受~_~  回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-15 09:02
            還有就是“同步”會更安全一點,雖然“效率”比較低  回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            路過
            Posted @ 2006-08-20 01:16
            第二個參數(shù)true和false只是表示后續(xù)的代碼是否繼續(xù)執(zhí)行,跟服務(wù)器端調(diào)用有什么沖突嗎?  回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-20 14:03
            第二個參數(shù) true表示異步,false表示同步,和服務(wù)端的調(diào)用沒直接關(guān)系。。

            http://www.ajaxchina.net/forum/read.php?fid=3&tid=12&fpage=
            看MSDN中對send方法的簡介:
            This method is synchronous or asynchronous, depending on the value of the bAsync parameter in the open call. If open is called with bAsync == False, this call does not return until the entire response is received or the protocol stack times out. If open is called with bAsync == True, this call returns immediately.
            send方法是否同步或異步工作取決于open方法中的bAsync參數(shù),如果bAsync == False表示send方法工作在同步狀態(tài)下,發(fā)送http請求后,只有當(dāng)客戶端接收到來自服務(wù)端的全部應(yīng)答數(shù)據(jù)或協(xié)議棧超時返回!反之bAsync == True,工作在異步狀態(tài)下,直接返回。
              回復(fù)  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-20 14:12
            同步:提交后等待服務(wù)器的響應(yīng),接收服務(wù)器返回的數(shù)據(jù)后再執(zhí)行下面的代碼
            異步:與上面相反,提交后繼續(xù)執(zhí)行下面的代碼,而在后臺繼續(xù)監(jiān)聽,服務(wù)器響應(yīng)后有程序做相應(yīng)處理,異步的操作好處是不必等待服務(wù)器而可以繼續(xù)在客戶端做其它事情。  回復(fù)  更多評論   
           
          主站蜘蛛池模板: 江阴市| 建水县| 射阳县| 云龙县| 安吉县| 彭泽县| 沛县| 肥东县| 弥勒县| 武汉市| 巴彦淖尔市| 通山县| 顺昌县| 孟津县| 西贡区| 盘锦市| 绥德县| 湄潭县| 甘洛县| 墨江| 资中县| 泗洪县| 峡江县| 济阳县| 乐亭县| 娄底市| 桦川县| 孙吴县| 峨眉山市| 鲜城| 武乡县| 合肥市| 万安县| 常德市| 广昌县| 临朐县| 张家界市| 忻城县| 越西县| 胶南市| 长武县|