我在ajax中遇到问题并且它不打印我想要的消息。我们来解释一下。 在PHP代码中,我有一个输入标签:
<input type="submit" id="login_button_add" name="submit" value="Add"
onclick="add_building(); showbuildings( );" />
这两个js函数是:
function add_building(){
var str1=document.getElementById("building_name").value;
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("txtHint10").innerHTML=xmlhttp.responseText;}
}
xmlhttp.open("GET","add_building.php?q="+str1,true);
xmlhttp.send();
}
在add_building.php
中,我在数据库中添加一行并打印消息。查询工作正常,但它不会在我的页面中打印带有我在html代码中的id的消息。我认为问题在于我调用了第二个js函数。因为当我单独调用add_building()
时,它可以完美地工作(打印消息)。
add_building.php
的php代码是:
$q=$_GET["q"];
if ($q!==''){
$link= mysqli_connect(...);
mysqli_set_charset($link, "utf8");
$sql="SELECT * FROM buildings WHERE name='$q'";
$result = mysqli_query($link,$sql);
if (!mysqli_num_rows($result)){
mysqli_set_charset($link, "utf8");
$sql="INSERT INTO buildings VALUES ('','$q','')";
$result =mysqli_query($link,$sql);
echo "The building added successfully.";
}
else {echo 'Building name exists. Try a different.';}
@ db_close($link);
}
else{echo 'Please insert a name.';}
其他js功能是:
function showbuildings(str)
{
if (str=="")
{
document.getElementById("show_buildings_js").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("show_buildings_js").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","showbds.php?q=",true);
xmlhttp.send();
}
在此功能中,我在页面中打印表格。这很好。
问题是来自add_building.php
的邮件无法在id='txtHint10'
中打印,
尽管add_building.php
中的所有其他人都在工作。我认为问题是我调用了第二个js函数,我有两个xmlhttp.responseText。因为当我单独调用js函数add_building()
时,它可以完美地工作并打印消息。
答案 0 :(得分:1)
问题是您使用第二个javascript函数覆盖了xmlhttp
变量。结果是只执行第二个函数的回调。
要使两个函数彼此独立工作,您需要使用不同的变量名称,或者使用var xmlhttp;
(更清晰的解决方案)在每个函数中本地声明它们。
请注意,除非您在函数中使用var
声明变量,否则javascript中变量的范围是全局的。