Php 使用AJAX使用选定城市的社区填充选择框

Php 使用AJAX使用选定城市的社区填充选择框,php,jquery,ajax,Php,Jquery,Ajax,我整个下午都在试着运行我的代码,但我做错了什么。我会解释我需要做什么。 当用户在一个选择框中选择他的城市时,我需要将与该城市对应的社区插入到另一个选择框中。为此,我使用以下逻辑: 我的数据库中有两个表,一个叫做城市,另一个叫做社区。表格城市的结构为: 城市标识主密钥 城市名称 表邻域的结构是: 邻居id主密钥 城市我想知道这个街区属于哪个城市。 邻居的名字 现在在注册页面中,我有以下代码来填充用户\u city\u id选择框: <label>City <span style=

我整个下午都在试着运行我的代码,但我做错了什么。我会解释我需要做什么。 当用户在一个选择框中选择他的城市时,我需要将与该城市对应的社区插入到另一个选择框中。为此,我使用以下逻辑: 我的数据库中有两个表,一个叫做城市,另一个叫做社区。表格城市的结构为: 城市标识主密钥 城市名称 表邻域的结构是: 邻居id主密钥 城市我想知道这个街区属于哪个城市。 邻居的名字 现在在注册页面中,我有以下代码来填充用户\u city\u id选择框:

<label>City <span style='color: red'>*</span><br/>
<select id='user_city_id' name='user_city_id'>
<option value=''>-- Select a city --</option>
<?php
    $sql = "SELECT * FROM cities ORDER BY city_id";

    foreach($connection->query($sql) as $city)
    {
        echo "<option value='{$city['city_id']}'>{$city['city_name']}</option>";
    }
?>
</select></label>
……但什么也没发生!当然,我做错了什么,但到目前为止,我无法自己解决。我在努力,但什么都没有。
我从未使用过AJAX。这里缺少什么?

您需要告诉浏览器从服务器发送的数据是JSON

在neighbor.ajax.php的顶部添加这一行


您需要告诉浏览器从服务器发送的数据是JSON

在neighbor.ajax.php的顶部添加这一行


今天我自己找到了解决办法。 这是一个非常简单的解决方案,我昨天因为疲劳而看不到。我只是注意到我没有发送语句来在选择框(选项变量数据)中插入HTML。我刚刚用$'user\u neighboratory\u id'.htmloptions.show;插入了它;。以下是解决方案:

$(function(){
$('#user_city_id').change(function()
{
    if($(this).val())
    {
        $.getJSON('neighborhood.ajax.php?search=', {city_id: $(this).val(), ajax: 'true'}, function(j)
        {
            var options = '<option value=""></option>'; 
            for (var i = 0; i < j.length; i++)
            {
                options += '<option value="' + j[i].neighborhood_id + '">' + j[i].neighborhood_name + '</option>';
            }
            $('#user_neighborhood_id').html(options).show();
        });
    }
    else
    {
        $('#user_neighborhood_id').html('<option value="">-- Select a neighborhood --</option>');
    }
});});

今天我自己找到了解决办法。 这是一个非常简单的解决方案,我昨天因为疲劳而看不到。我只是注意到我没有发送语句来在选择框(选项变量数据)中插入HTML。我刚刚用$'user\u neighboratory\u id'.htmloptions.show;插入了它;。以下是解决方案:

$(function(){
$('#user_city_id').change(function()
{
    if($(this).val())
    {
        $.getJSON('neighborhood.ajax.php?search=', {city_id: $(this).val(), ajax: 'true'}, function(j)
        {
            var options = '<option value=""></option>'; 
            for (var i = 0; i < j.length; i++)
            {
                options += '<option value="' + j[i].neighborhood_id + '">' + j[i].neighborhood_name + '</option>';
            }
            $('#user_neighborhood_id').html(options).show();
        });
    }
    else
    {
        $('#user_neighborhood_id').html('<option value="">-- Select a neighborhood --</option>');
    }
});});

使用浏览器开发人员工具的“网络”选项卡查看往返服务器的流量。我能说的是,当我选择时,CITY_ID变量的值被传递,但仍然没有答案。我认为我的PHP脚本有缺陷。请使用浏览器开发工具的Net选项卡查看进出服务器的流量。我能说的是,当我选择时,CITY_ID变量的值被传递,但仍然没有答案。我认为我的PHP脚本有缺陷。
require_once("db-connect.php");

$city_id = $_GET['user_city_id'];

$neighborhoods = array();

$sql = "SELECT * FROM neighborhoods WHERE city_id = {$city_id} ORDER BY neighborhood_name";
$stmt = $connection->prepare($sql);
$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    extract($row);
    $neighborhoods[] = array
    (
        'neighborhood_id'   => $neighborhood_id,
        'neighborhood_name' => $neighborhood_name
    );
}

echo(json_encode($neighborhoods));
header('Content-Type: application/json');
$(function(){
$('#user_city_id').change(function()
{
    if($(this).val())
    {
        $.getJSON('neighborhood.ajax.php?search=', {city_id: $(this).val(), ajax: 'true'}, function(j)
        {
            var options = '<option value=""></option>'; 
            for (var i = 0; i < j.length; i++)
            {
                options += '<option value="' + j[i].neighborhood_id + '">' + j[i].neighborhood_name + '</option>';
            }
            $('#user_neighborhood_id').html(options).show();
        });
    }
    else
    {
        $('#user_neighborhood_id').html('<option value="">-- Select a neighborhood --</option>');
    }
});});