以文本方式查看主题 - 中文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 --
我也怀疑是这个问题,如果这样的话,是不是从道理上说应在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 |