AJAX傳參從失敗到成功小結:

          看了AJAX基礎教程,感覺不錯,但是在向服務器傳遞參數的時候總是會有讓我感到苦惱的問題,
          比如下面的代碼:
          <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>
          在服務端的CountServlet的doGet()方法在多次請求之間只會被調用一次,痛苦!!!(難道是異步的問題...)

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

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

          8.19日加:
          解決辦法:
          除了高手回復的方法,還有一種解決辦法就是:
          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傳參從失敗到成功小結:
            xunliyong
            Posted @ 2006-08-14 14:20
            原因就是服務器每次都是從從相同的緩存中給出返回應答導致的,只要加下如下代碼就可以了:
            response.setHeader("Cache-Control", "no-cache");  回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            pear
            Posted @ 2006-08-14 17:27
            那為什么POST方式傳參數不會有緩存問題呢?@xunliyong
              回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            阿良
            Posted @ 2006-08-15 00:26
            xmlHttp.open("GET","/CountServlet?Sid="+Sid,true);
            你用這樣的方式來打開xmlHttp的話就根本沒用到異步的技術,是同步的,也就是你這樣做就根本不是在用AJAX.至于你失敗的原因,xunliyong已經解釋清楚了,要加上句話,讓服務器端不要緩存,那么就可以得到正確的結果了.書上也是這樣說的
              回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            pear
            Posted @ 2006-08-15 08:58
            我只是用他來實現當用戶點擊“下載”是,讓下載的同時也讓“下載次數”加1,并且不刷新本頁面,至于“同步”我也能接受~_~  回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            pear
            Posted @ 2006-08-15 09:02
            還有就是“同步”會更安全一點,雖然“效率”比較低  回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            路過
            Posted @ 2006-08-20 01:16
            第二個參數true和false只是表示后續的代碼是否繼續執行,跟服務器端調用有什么沖突嗎?  回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            pear
            Posted @ 2006-08-20 14:03
            第二個參數 true表示異步,false表示同步,和服務端的調用沒直接關系。。

            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參數,如果bAsync == False表示send方法工作在同步狀態下,發送http請求后,只有當客戶端接收到來自服務端的全部應答數據或協議棧超時返回!反之bAsync == True,工作在異步狀態下,直接返回。
              回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結:
            pear
            Posted @ 2006-08-20 14:12
            同步:提交后等待服務器的響應,接收服務器返回的數據后再執行下面的代碼
            異步:與上面相反,提交后繼續執行下面的代碼,而在后臺繼續監聽,服務器響應后有程序做相應處理,異步的操作好處是不必等待服務器而可以繼續在客戶端做其它事情。  回復  更多評論   
           
          主站蜘蛛池模板: 礼泉县| 攀枝花市| 紫阳县| 昭苏县| 谷城县| 出国| 安吉县| 江油市| 叶城县| 伊宁县| 墨江| 五指山市| 麟游县| 黄龙县| 长沙市| 泾阳县| 宜章县| 保靖县| 洮南市| 嘉义市| 罗定市| 宣武区| 黄平县| 安远县| 克什克腾旗| 康乐县| 梧州市| 务川| 乐安县| 星座| 郯城县| 黎平县| 西乡县| 云林县| 漾濞| 柯坪县| 米泉市| 班戈县| 台南县| 洛隆县| 公安县|