同时通过ajax用“onclick”调用2个函数

时间:2011-04-17 17:12:27

标签: php ajax

使用AJAX时遇到问题。我是新手,所以答案可能很简单!

所以,我有这段代码。

echo '<input type="button" onclick="opinion(1,\''.$v.'\'); op_status(1,\''.$v.'\');"/>';

用php编写。

通过onclick事件调用的2个函数,在2个不同的html div中切换AJAX。我得到的是两个div的第二个函数的结果。

为什么会发生这种情况的任何想法?

谢谢!

抱歉给您带来不便,但这是我的第一篇文章。所以这是两个(相同的,只是有不同的变量)js脚本之一。

function op_status(op,pid)
{
if (op=="")
  {
  document.getElementById("opstatus"+pid).innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("opstatus"+pid).innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","post_op_stat_disp.php?ajxpid="+pid,true);
xmlhttp.send();
}

调用的文件会根据某个html div上的检查进行一些检查并输出文本。其他js脚本完全相同,进行一些其他测试并在另一个html div上输出一些其他文本。 :)但是输出是在两个div中回显的相同文本

1 个答案:

答案 0 :(得分:3)

首先我要添加“var xmlhttp = null;”在函数的顶部 - 将局部范围变量而不是使其变为全局 - 正如@David Dorward指出的那样。这将最终在第二个声明的函数中分配ajax请求的响应处理程序(这恰好是第二个)作为两个ajax请求的响应处理程序,并且您将得到您描述的行为。

如果你在两个div中仍然得到相同的文本,那么我怀疑两个javascript函数都调用post_op_stat_disp.php而不是调用我认为是post_opinion_disp.php的意见函数,因此它是将相同的数据返回给每个div。或者(甚至更不可能)post_opinion_disp和post_op_stat_disp都返回相同的结果。

由于这个问题对AJAX来说并不是真正的问题,而是可能是编码问题 - 我建议手动导航到http:// [server] /post_op_stat_disp.php?ajaxid=test和你的其他网址,看看应该怎么做填充两个div。

然后我强烈建议您将ajax代码抽象为一些常用函数,这样就不会复制http状态代码和xmlhttp实例化逻辑。虽然它可能无法帮助您解决这个特定问题,但如果您遵循@Jared Farrish的建议并使用jquery,它会将代码大小减少到这些行:



  function op_status(op, pid) {
     if (!op) return $('#opstatus' + pid).html("");

     $.get('post_op_status_disp.php?ajaxid=' + pid, function(r) {
          $('#opstatus' + pid).html(r);
     });
  }

我的钱在var关键字上,这将确保你获得两个不同的xmlhttp对象,而不是一个全局对象。

但正如大多数人已经评论过的那样 - 您可能希望发布生成的结果,以帮助我们帮助您跟踪此问题。

谢谢,让我们知道结果如何!