使用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中回显的相同文本
答案 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对象,而不是一个全局对象。
但正如大多数人已经评论过的那样 - 您可能希望发布生成的结果,以帮助我们帮助您跟踪此问题。
谢谢,让我们知道结果如何!