以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 HTML/XHTML/Ajax/Web 2.0/Web 3.0 』  (http://bbs.xml.org.cn/list.asp?boardid=22)
----  求助,关于ajax与asp的执行问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=22&rootid=&id=42447)


--  作者:citicrc
--  发布时间:1/18/2007 10:01:00 AM

--  求助,关于ajax与asp的执行问题
关于ajax对应asp执行的新问题
一段代码,作用是一个页面上的一个表,每点一行执行一次脚本从数据库中相应读取该行信息写往页面.但发现似乎执行有些问题,首次查询结果没有任何问题,但再次点一样的行查询时,哪怕数据库中结果已经变更,执行的结果与首次查询一样.就是ASP似乎没有重新执行,而是返回与上次同样的结果.除非把IE关掉,然后再打开,再次查询,才能得到新的结果.找不出原因,哪位能帮着想想.谢谢.
页面的代码:
function getError(){
 var cACCT_NO = document.getElementById("myACCT_NO").value;
 var file = "showerror.asp?cTbl=" + document.getElementById("tbl_name").value + "&cAno=" + cACCT_NO;
 if(window.XMLHttpRequest){
  xmlObj = new XMLHttpRequest();
 }else if(window.ActiveXObject){
  xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
 }else{
  return;
 }
 xmlObj.onreadystatechange = function(){
  if(xmlObj.readyState == 4){
   if(xmlObj.statusText == "OK"){    
    var cObj = xmlObj.responseXML;
    cObj.setProperty("SelectionLanguage", "XPath");
    var node = cObj.selectSingleNode("/root");                  
                if(node){
     var node_NU = node.childNodes.length;
     if (node_NU>0){
      var cMsg = "本条记录存在如下错误:";      
                     for(var i=0;i<node.childNodes.length;i++){
       cMsg += node.childNodes[i].childNodes[0].text + " " + node.childNodes[i].childNodes[1].text + ";";
      }
     }
    }
    document.getElementById("Err_Msg").innerText = cMsg;    
   }else{
    document.getElementById("Err_Msg").innerText = "数据读取错误:" + xmlObj.statusText;
   }
  }
 }
 xmlObj.open('Get',file,true);
 xmlObj.send('');
}
对应的asp代码
<%
   '定义变量
   Dim cAcctno,cTablName,cPageNum,cPageCound,MyConn,cSelCmd,cHtml
   '设置参数
   cAcctno = Request.Querystring("cAno")
   cTblName = Request.Querystring("cTbl")
   cSelCmd = "select t1.TYPE_NO,t2.ERR_DESC from tmp_" + cTblName + " t1 left outer join trg_err_type t2 on(t1.TYPE_NO = t2.ERR_NO) where "
   cSelCmd = cSelCmd + "t1.ACCT_NO = '" + cAcctno + "' and t2.TABLE_NAME = '" + UCase(cTblName) + "' order by t1.TYPE_NO"
   Set MyConn = Server.CreateObject("ADODB.Connection")
   MyConn.open("User ID=ETL;Password=ETL;Data Source=testODBC")
   Set myRec = MyConn.Execute(cSelCmd)
   Set MyConn = Nothing
   
   cHtml = "<?xml version='1.0' encoding='GB2312'?>"
   cHtml = cHtml + "<root>"
   myRec.movefirst
   do while not myRec.eof
      cHtml = cHtml + "<cError>"
   cHtml = cHtml + "<cErrorType>" + myRec.Fields(0).value + "</cErrorType>"
   cHtml = cHtml + "<cErrorName>" + myRec.Fields(1).value + "</cErrorName>"
      cHtml = cHtml + "</cError>"
   myRec.movenext
   loop
   cHtml = cHtml + "</root>"
   Response.Charset = "GB2312"
   Response.ContentType = "text/xml"
   Response.Write(cHtml)
%>



--  作者:Qr
--  发布时间:1/18/2007 10:45:00 AM

--  
加个随机数,就象CSDN一样。
showerror.asp?temp=.445454&cTbl....

这个只是论坛上常见的用法,如果没成功,XMLHTTP中有句强制更新的命令,暂时记不起了,如不能,再回贴找偶要,呵呵


--  作者:Qr
--  发布时间:1/18/2007 10:52:00 AM

--  
还有,你那个SESSION的问题,建议在数据提交后,测试并将结果以XML或JSON甚至TEXT方式返回客户端,作为判断的根据,而不能用readyState和statusText ,这两个只能表明asp页面的状态,不能反映数据提交的状态。


--  作者:citicrc
--  发布时间:1/18/2007 11:04:00 AM

--  
对,我现在就是用传入一个多余随机参数的方式解决问题了,但对这个情况造成的原因想有个深究,到底这种情况是怎么产生的,因为这些情况一定有其形成的机理,了解之后有必要改变用AJAX编码的习惯.
--  作者:Qr
--  发布时间:1/18/2007 11:10:00 AM

--  
这个不是AJAX的问题,而是IE或XML的问题,XML会缓存在客户端,提交请求后,IE或XMLHTTP首先会从缓存中查找数据,如果存在,就返回,不存在,才从SERVER返回数据。大概就是这个意思。
--  作者:deyga
--  发布时间:1/18/2007 6:14:00 PM

--  [原创]
你的水平有多高
--  作者:citicrc
--  发布时间:1/19/2007 10:05:00 AM

--  
以下是引用Qr在2007-1-18 11:10:00的发言:
这个不是AJAX的问题,而是IE或XML的问题,XML会缓存在客户端,提交请求后,IE或XMLHTTP首先会从缓存中查找数据,如果存在,就返回,不存在,才从SERVER返回数据。大概就是这个意思。


我也怀疑是这个问题,如果这样的话,是不是从道理上说应在AJAX发起前先做一个清空可识别缓存内容的过程?当然如果那样的话唯一简单的办法是加随机参数了
--  作者:Qr
--  发布时间:1/19/2007 12:25:00 PM

--  搜索关键词:强制更新 缓存  xmlhttp setRequestHeader If-Modified-Since
xmlhttp.setRequestHeader("If-Modified-Since","0");
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms