1

ajaxに問題があり、必要なメッセージが出力されません。説明しましょう。PHPコードには入力タグがあります:

<input type="submit" id="login_button_add" name="submit" value="Add" 
onclick="add_building(); showbuildings( );" />

これらの2つの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のメッセージがページに出力されません。問題は、2番目のjs関数を呼び出すことだと思います。私が一人で呼ぶとき、add_building()それは完璧に機能するからです(メッセージを印刷します)。

のphpコードadd_building.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が印刷されないことです。問題は、2番目のjs関数を呼び出し、2つのxmlhttp.responseTextがあることだと思います。js関数を単独で呼び出すと、完璧に機能し、メッセージを出力するためです。id='txtHint10'add_building.phpadd_building()

4

1 に答える 1

1

xmlhttp問題は、2番目のjavascript関数で変数を上書きしていることです。その結果、2番目の関数からのコールバックのみが実行されます。

両方の関数が互いに独立して機能するためには、異なる変数名を使用するか、var xmlhttp;(よりクリーンなソリューション)を使用して各関数でローカルに宣言する必要があります。

関数でを使用して宣言しない限り、javascriptの変数のスコープはグローバルであることに注意してvarください。

于 2012-11-15T21:50:41.220 に答える