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

          看了AJAX基礎教程,感覺不錯,但是在向服務器傳遞參數(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>
          在服務端的CountServlet的doGet()方法在多次請求之間只會被調(diào)用一次,痛苦!!!(難道是異步的問題...)

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

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

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

            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請求后,只有當客戶端接收到來自服務端的全部應答數(shù)據(jù)或協(xié)議棧超時返回!反之bAsync == True,工作在異步狀態(tài)下,直接返回。
              回復  更多評論   
          • # re: AJAX傳參從失敗到成功小結(jié):
            pear
            Posted @ 2006-08-20 14:12
            同步:提交后等待服務器的響應,接收服務器返回的數(shù)據(jù)后再執(zhí)行下面的代碼
            異步:與上面相反,提交后繼續(xù)執(zhí)行下面的代碼,而在后臺繼續(xù)監(jiān)聽,服務器響應后有程序做相應處理,異步的操作好處是不必等待服務器而可以繼續(xù)在客戶端做其它事情。  回復  更多評論   
           
          主站蜘蛛池模板: 吴忠市| 年辖:市辖区| 宿松县| 北流市| 清苑县| 晋中市| 广灵县| 安远县| 洮南市| 富川| 墨脱县| 宜昌市| 静安区| 甘肃省| 镇远县| 湘潭县| 平定县| 大悟县| 健康| 庆元县| 渭源县| 平陆县| 息烽县| 乐亭县| 平舆县| 古蔺县| 黄浦区| 定安县| 建水县| 怀仁县| 牡丹江市| 金门县| 陆丰市| 蒙山县| 卢龙县| 化德县| 屯留县| 澳门| 贞丰县| 泰州市| 九台市|