日期:2014-05-16  浏览次数:20812 次

AJAX 后台有时执行方法,有时执行,有时不执行问题 - Web 开发 / Ajax
我经常碰见这样的问题
我想用JS执行后台方法,为什么有时候执行,有时候不执行
代码如下:
var request;
HTML code
function createRequest() {
 try {
  request = new XMLHttpRequest();
 } catch (trymicrosoft) {
  try {
   request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (othermicrosoft) {
   try {
    request = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (failed) {
    request = false;
   }
  }
 }

 if (!request)
  alert("Error initializing XMLHttpRequest!");
}





createRequest();
var requesturl = '<%=request.getContextPath()%>/trainplan/addLeafNode.shtml?objectivename='+document.all.objectivename.value+'&objectivecontent='+document.all.objectivecontent.value+"&paterid="+paterid;
request.open("GET", requesturl, true);
request.onreadystatechange = openResponse;


按道理说,AJAX应该执行<%=request.getContextPath()%>/trainplan/addLeafNode.shtml 地址后台里面的方法
因为我里面有修改数据库的操作
但有时候添加数据库记录,有时候不添加数据库记录,到底怎么解决,我只想搞明白,没别的意思
那位大大能解释一下

我后台代码肯定没问题,如果我是正常提交,然后页面刷新的话,是正确的

------解决方案--------------------
探讨
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert("浏览器不支持 AJAX!");
return;
}
var url = " <%=strGetDataUrl%>";
url = url + "?Class=Show";
url = url + "&SID=" + Math.random(); // 加上一个随机数,必须滴!
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);

------解决方案--------------------
我觉得后面加个 time比较合适, 比如你不想他每次请都都更新缓存, 就可以后台跟个时间, 以分钟或小时为标准, 即在同一时间段内发送的后面跟随数字是相同的...
------解决方案--------------------
探讨
这是get方式提交时的缓存问题,说到底是ie惹的祸,你加一句
request.setRequestHeader("If-Modified-Since","0");
在request.open("GET", requesturl, true); 前就可以了

------解决方案--------------------
UP
------解决方案--------------------
缓存问题
方法一:
xmlHttp.open("GET", "default.aspx", true);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.send(null);
方法二:
xmlHttp.open("GET", "default.aspx?param="+Math.random(), true);
或者
xmlHttp.open("GET", "default.aspx?param="+new Date().getTime(), true);

------解决方案--------------------
探讨
缓存问题
方法一:
xmlHttp.open("GET", "default.aspx", true);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.send(null);
方法二:
xmlHttp.open("GET", "default.aspx?param="+Math.random(), true);
或者
xmlHttp.open("GET", "default.aspx?param="+new Date().getTime(), true);

------解决方案--------------------
加随机数行,加时间也行,目的只有一个,不用缓存,每次都去数据库取,就不会出现问题了。
------解决方案--------------------
mark
------解决方案--------------------
探讨
引用:
这是get方式提交时的缓存问题,说到底是ie惹的祸,你加一句
request.setRequestHeader("If-Modified-Since","0");