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 阅读(2954) 评论(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
    同步:提交后等待服务器的响应,接收服务器返回的数据后再执行下面的代码
    异步:与上面相反,提交后继续执行下面的代码,而在后台继续监听,服务器响应后有程序做相应处理,异步的操作好处是不必等待服务器而可以继续在客户端做其它事情。  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航: