尝试从另一个.php页面加载一些文本而不重新加载当前页面

时间:2013-12-31 21:41:23

标签: javascript php ajax

尝试按照此示例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返回的文字会覆盖txtVoteCounttxtVoteMessage

那么我如何让它以我想要的方式运作呢?

1 个答案:

答案 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/