尝试按照此示例http://www.w3schools.com/php/php_ajax_database.asp
进行操作我有这段代码
function showVoteCount(str)
{
if (str=="")
{
document.getElementById("txtVoteCount").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("txtVoteCount").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getVote.php?id="+str,true);
xmlhttp.send();
}
function showVoteUp(str)
{
if (str=="")
{
document.getElementById("txtVoteMessage").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("txtVoteMessage").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","voteup.php?id="+str,true);
xmlhttp.send();
}
function showVoteDown(str)
{
if (str=="")
{
document.getElementById("txtVoteMessage").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("txtVoteMessage").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","votedown.php?id="+str,true);
xmlhttp.send();
}
然后我有这个代码的链接
echo '<a href="view_definition.php?id='. $row['id'] .'&voteup=1" onclick="showVoteUp('. $row['id'] .');showVoteCount(' . $row['id'] . '); return false;">Vote Up</a>';
我想做的是
从getVote.php
返回文本以进入txtVoteCount
以及从voteup.php
返回txtVoteMessage
但正在发生的事情是从链接调用showVoteCount
时,getVote.php
返回的文字会覆盖txtVoteCount
和txtVoteMessage
。
那么我如何让它以我想要的方式运作呢?
答案 0 :(得分:2)
我想知道你的xmlhttp变量是否变得全局并相互踩踏?尝试将xmlhttp对象声明为“var xmlhttp = new
等...”。包括“var
”将改变该变量的范围,使其包含在您的函数中。
这个怎么样:改变你的每个功能就像这样开始:
function showVoteUp (str)
{
var xmlhttp; // add this line to all your functions to declare xmlhttp as a "scoped" var.
if (str == "") {
//... etc etc, the rest of your code...
编辑: JavascriptIsSexy有一篇很棒的文章描述了范围,以及在声明变量时应该注意的事项: http://javascriptissexy.com/javascript-variable-scope-and-hoisting-explained/