Javascript 尝试从另一个.php页面加载一些文本,而不重新加载当前页面
在这里尝试遵循这个示例 我有这个密码Javascript 尝试从另一个.php页面加载一些文本,而不重新加载当前页面,javascript,php,ajax,Javascript,Php,Ajax,在这里尝试遵循这个示例 我有这个密码 function showVoteCount(str) { if (str=="") { document.getElementById("txtVoteCount").innerHTML=""; return; } if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); }
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>';
然后我有一个与此代码的链接
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>';
echo';
我想做的是
获取从getVote.php返回的文本
进入txtVoteCount
和从voteup.php
返回的文本进入txtVoteMessage
但是当从链接调用showVoteCount
时,从getVote.php
返回的文本将覆盖我的txtVoteCount
和txtVoteMessage
那么,我如何使它按我希望的方式工作呢?我想知道您的xmlhttp变量是否正在变得全局并相互影响?尝试将xmlhttp对象声明为“
var xmlhttp=new
etc…”。包含“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有一篇很好的文章描述了范围,以及声明变量时应该注意的事项:
虽然学习ajax的内部工作原理很好,但您应该让开发的第三方为您完成繁重的工作。jQuery让我开始使用javascript,现在我离不开它,甚至用node.js开发网站……由于我使用jQuery所做的所有工作,它的异步行为很容易掌握。此外,jQuery还使php变得更简单。json_encode几乎一直是我所有php脚本中的最后一行。可惜我没有机会尝试。我只使用1个php文件返回一个JSON,返回2个变量,然后解析JSON并将其放入适当的txtStrings中,从而解决了这个问题。我认为JSON方法是更好的选择,但不管怎样,您可能希望在其中添加“var”——这没有污染全局变量的意义。整合通话几乎总是一个不错的选择。处理纯JS Ajax而不是运行jQuery,真是太好了!我让我的JSON工作。但是我很好奇你的解决方案是否能解决我之前的问题,所以我创建了一些测试页面,使用旧的方法来点击2个php文件并进行测试。太糟糕了,我的网站的ftp关闭了。一旦它出现,我会测试它,如果它有效,我会接受你的答案,这样其他可能有同样问题的人也可以使用这个答案:)Groovy——我希望它有效!你在现场进行开发吗?我签出了“unurbandictionary”,并注意到底部的sql,所以我认为您正在进行一些测试。您是否已签出XAMPP进行本地开发?非常酷的网站,顺便说一句!好的,w3示例是完全有效的,至少对于他们的简短示例来说是这样:-)当我了解到
var
这件事时,我开始总是显式地用var
声明变量(除非需要其他行为)--如果你不小心的话,它真的会咬你一口。我在答案中添加了一个描述变量范围的链接,以获取更多信息。另外,我建议在本地使用xampp进行开发——这是一种在发布之前检查内容的非常好、简单、快速的方法。比ftp记录每一个变化要快得多。快乐编码!