一个页面,两次AJAX调用,产生的错误如何解决

wggipkhgef 2009-01-25 03:15:10
我在一个页面内,有两段js程序通过ajax向两个不同的页面请求数据,结果只返回第一次请求的数据,本来两个地方要显示不同的返回数据,结果两个位置都显示同一次请求返回的数据,请问如何解决?按理说,一个页面不可能只允许一次ajax调用啊,我把其中一个地方改为onchange,onclick...之类的事件就又正常,没有问题,但如果没有事件,是直接请求的话,就只返回第一次请求的数据
...全文
556 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DAMINGSHANG 2009-01-27
  • 打赏
  • 举报
回复
1,页面不可能只允许一次ajax调用
2,因为你的代码不是很全,所以暂时只能给你一个解决方案,如下
function aa()
{
createXHR();
url="aa.asp";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   document.getElementById("aa").innerHTML = xmlhttp.responseText;
bb();//在这里加上bb的执行,onload时不直接调用。
  }
 }
ajax.send(null);
}

function bb()
{
createXHR();
url="bb.asp";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   document.getElementById("bb").innerHTML = xmlhttp.responseText;
  }
 }
ajax.send(null);
}
午夜咖啡男 2009-01-25
  • 打赏
  • 举报
回复
按照你的逻辑,貌似之创建了一个全局的请求对象,当然有问题
wggipkhgef 2009-01-25
  • 打赏
  • 举报
回复
谢谢大哥,我回去测试一下,年后再来结贴,呵呵
neo_yoho 2009-01-25
  • 打赏
  • 举报
回复
怎么一会儿xmlhttp一会儿ajax的。。。
function createXHR()
{
//......建立一个XMLHttpRequest对象
return xmlhttp;}
function aa()
{
var xmlhttp = createXHR();
url="aa.asp";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   document.getElementById("aa").innerHTML = xmlhttp.responseText;
  }
 }
xmlhttp.send(null);
}


wggipkhgef 2009-01-25
  • 打赏
  • 举报
回复
上面代码写快了,有点错误
getElementById("aa")改为getElementById("a")
getElementById("bb")改为getElementById("b")
ajax.send(null)改为xmlhttp.send(null)
wggipkhgef 2009-01-25
  • 打赏
  • 举报
回复
我现在是在网吧上网,没办法贴代码,不过可以简要的说明一下逻辑
HTML部分
<div id='a'></div><script type='text/javascript'>aa();</script>
<div id='b'></div><script type='text/javascript'>bb();</script>

JS部分
function createXHR()
{
//......建立一个XMLHttpRequest对象
}

function aa()
{
createXHR();
url="aa.asp";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   document.getElementById("aa").innerHTML = xmlhttp.responseText;
  }
 }
ajax.send(null);
}

function bb()
{
createXHR();
url="bb.asp";
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
   document.getElementById("bb").innerHTML = xmlhttp.responseText;
  }
 }
ajax.send(null);
}


---------------------------------------
得到的结果是只返回aa()函数内的aa.asp返回数据,id="a"和id="b"的div内显示同样的值,假如HTML部分改成如下:
<div id='a'></div><script type='text/javascript'>aa();</script>
<div id='b'><a href='#' onclick='javascript:bb();'>点击获得数据</a></div>

这样id="a"的部分可以显示返回值,通过点击id="b"内的"点击获得数据"也可以让id="b"的div获得正确返回值
neo_yoho 2009-01-25
  • 打赏
  • 举报
回复
不知道代码是什么样子的
反正要注意用私有变量去创建请求和回调函数的写法

52,787

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧