根据另一个选择填充下拉列表

时间:2015-05-21 15:52:03

标签: javascript php

我正在尝试根据用户选择的国家/地区填充包含城市名称的下拉列表。 这是该国家的下拉列表:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://jsfiddle.net/bx1en700/assets.transloadit.com/js/jquery.transloadit2-v2-latest.js"></script>

<img id="my_img" src="http://i.imgur.com/SHo6Fub.jpg">

我正在使用这个javascript函数来填充它:

<select name = "country" onChange = "loadcities(this.value)">
        <?php
            include 'dbconnect.php';
            $query = "SELECT * FROM Country";
            $result = $mysqli->query($query);
            while($row = $result->fetch_array()){
                echo "<option value = '$row[0]'> $row[2] </option>";
            }
        ?>
    </select>

}

这是在上一个函数中使用的php文件:

function loadcities(selected){
var s = document.getElementById("city");
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
            var citynames = (xmlhttp.response).slice();
            for(var i = 0; i < citynames.length(); i++){
                var option = document.createElement(i.toString());
                option.text = citynames[i];
                s.add(option);
            }
        }
    }
    xmlhttp.open("GET", "loadcities.php?q=" + str, true);
    xmlhttp.send();

我意识到可能存在很多错误,但我不知道如何修复它们。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,在第3个代码段中,您同时拥有$ cityname和$ citynames。我认为他们应该是一样的。您还要从数据库中提取一列,然后使用 THIRD 列($ row [ 2 ])。可能这应该是$ row [0]。

最后你回应一个数组......它只会输出array而不是数组的内容。同样在第二部分中,在javascript代码中,您使用的是slice(),它用于从数组中获取一组值到新数组中。

我相信您应该将第3个代码片段更改为:

<?php
$q = $_REQUEST["q"];
include "dbconnect.php";
$result = $mysqli->query("SELECT cityname from CITY WHERE City.countryid = $q");
while($row = $result->fetch_array())
{
    echo $row[0].'@@@@';
}
?>

然后你应该在你的javascript中改变你的行:

var citynames = (xmlhttp.response).slice();

var citynames = (xmlhttp.response).split('@@@@');

作为旁注,您的PHP脚本存在巨大的安全漏洞:您将$ _REQUEST输入直接传递给数据库。在这样做之前你应该对它进行消毒,否则你就冒险被黑了。