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

          看了AJAX基礎(chǔ)教程,感覺(jué)不錯(cuò),但是在向服務(wù)器傳遞參數(shù)的時(shí)候總是會(huì)有讓我感到苦惱的問(wèn)題,
          比如下面的代碼:
          <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()方法在多次請(qǐng)求之間只會(huì)被調(diào)用一次,痛苦!!!(難道是異步的問(wèn)題...)

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

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

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

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

            http://www.ajaxchina.net/forum/read.php?fid=3&tid=12&fpage=
            看MSDN中對(duì)send方法的簡(jiǎn)介:
            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請(qǐng)求后,只有當(dāng)客戶端接收到來(lái)自服務(wù)端的全部應(yīng)答數(shù)據(jù)或協(xié)議棧超時(shí)返回!反之bAsync == True,工作在異步狀態(tài)下,直接返回。
              回復(fù)  更多評(píng)論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-20 14:12
            同步:提交后等待服務(wù)器的響應(yīng),接收服務(wù)器返回的數(shù)據(jù)后再執(zhí)行下面的代碼
            異步:與上面相反,提交后繼續(xù)執(zhí)行下面的代碼,而在后臺(tái)繼續(xù)監(jiān)聽(tīng),服務(wù)器響應(yīng)后有程序做相應(yīng)處理,異步的操作好處是不必等待服務(wù)器而可以繼續(xù)在客戶端做其它事情。  回復(fù)  更多評(píng)論   
           
          主站蜘蛛池模板: 宁阳县| 西华县| 鲁山县| 宣威市| 宁南县| 石景山区| 曲阳县| 宁晋县| 云龙县| 喜德县| 青田县| 霍州市| 宾川县| 怀宁县| 乌鲁木齐市| 镇雄县| 东山县| 尼玛县| 翁牛特旗| 左贡县| 锡林郭勒盟| 江门市| 盱眙县| 扶沟县| 湖南省| 平凉市| 内江市| 渭源县| 娄烦县| 方正县| 农安县| 宜城市| 德兴市| 全州县| 炉霍县| 吉首市| 滨海县| 滦平县| 西安市| 阳东县| 祁门县|