2

好的,基本上这是我的页面:当页面加载时,它会向我的 php 文件发送 Ajax Post 请求,并发送两个变量 - 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;
}

此处生成的选择列表,在其值更改时使用下一个函数。页面上的另一个选择列表也使用了这个功能。

现在,我还有第二个函数,它在下拉列表的值更改时运行。现在这个函数还发送一个 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>

现在最后,我的问题是为什么我不能得到我的两个下拉菜单的值,为什么它没有改变我的 xquery 变量而是将相同的东西输出到我的 php 文件,即使它是不同的 ajaz 请求。

4

2 回答 2

3

听起来你可能有冲突的变量。您应该var xmlhttp在每个函数的顶部单独声明您的。请参阅此之前的帖子:

如何阻止 XMLHTTP 相互冲突?

于 2012-08-01T23:32:28.583 回答
0

我拉了很多头发后才弄清楚。是 PHP 的挑剔习惯之一,我需要 == 我的 if 语句而不是 =。多谢你们。

于 2012-08-02T20:57:41.323 回答