2

さて、基本的にここに私のページがあります: ページが読み込まれると、Ajax Post リクエストが私の php ファイルに送信され、2 つの変数 (ida=yes と xquery=dropdown) が送信されます。そのコードはここにあります:

function ddmenu() {
var xmlhttp;
if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var url = "dex.php";
var params = "xquery=dropdown&ida=yes";
xmlhttp.open("POST", url, true);
//Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.onreadystatechange = function() {
    //Call a function when the state changes.
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("dropdown").innerHTML=xmlhttp.responseText;
    }
}
xmlhttp.send(params);
}

この Ajax リクエストは、100% 正しく機能しているこの PHP をアクティブにします。

$xquery = $_POST['xquery'];
// If $xquery is a dropdown.
if ($xquery = "dropdown") {
$dd = "SELECT * FROM tablename";
$ddq = mysql_query($dd) or die('Error: '.mysql_error ());
echo 'Choose your Pokemon: <select id="tableid" onchange="tableloader()">';
while ($row = mysql_fetch_array($ddq)) {
    echo '<option value="'.$row['pokemon_name'].'">'.$row['natdex'].'-'.$row['pokemon_name'].'</option>';
}
echo "</select>".$xquery;
}

ここで生成された選択リストは、値が変更されると次の関数を使用します。ページ上の別の選択リストもこの関数を使用します。

現在、ドロップダウンの値が変更されたときに実行される 2 つ目の関数もあります。現在、この関数は Ajax Post リクエストと、xquery および ida 変数も送信します。私の問題は、php ページで xquery 変数をエコーし​​ても、xquery がドロップダウンとして設定されていることです。テーブルとして出てくるとき。コードが基本的に以下に示すように:

function tableloader(str) {
var xmlhttp;
if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var url = "dex.php";
var var1 = document.getElementById("gendrop").value;
var var2 = document.getElementById("tableid").value;
var params = "xquery=tables&ida=yes&var1="+var1+"&var2="+var2;
xmlhttp.open("POST", url, true);
//Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.onreadystatechange = function() {
    //Call a function when the state changes.
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("searchdisplay").innerHTML=xmlhttp.responseText;
    }
}
xmlhttp.send(params);
} 

この関数は、最初の関数で生成されたドロップダウン値から値を取得し、このドロップダウンからのドロップダウン値も使用します。

<select id="gendrop" onchange="tableloader(this.value)">
    <option value="all">All</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">2</option>
    <option value="4">4</option>
    <option value="4">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
</select>

結局のところ、私の質問は、2 つのドロップダウン メニューの値を取得できない理由と、xquery 変数を変更せず、別の ajaz リクエストであっても同じものを php ファイルに出力する理由です。

4

2 に答える 2

3

変数が競合しているようです。var xmlhttp各関数の先頭で個別に宣言する必要があります。この前の投稿を参照してください:

XMLHTTPが互いに衝突するのを防ぐ方法は?

于 2012-08-01T23:32:28.583 に答える
0

髪をたくさん引っ張った後、私はそれを理解しました。PHP の気難しい習慣の 1 つであったため、単に = ではなく、if ステートメントを == にする必要がありました。みんなありがとう。

于 2012-08-02T20:57:41.323 に答える