【问题标题】:Elegant way to populate the dropdown with ajax Without reloading使用 ajax 填充下拉列表的优雅方式,无需重新加载
【发布时间】:2018-02-21 11:24:00
【问题描述】:

谁能帮我解决这个问题我想用 ajax 填充下拉列表。当我在数据库中插入数据时,我希望它在不刷新的情况下显示在选择选项上。此下拉列表不基于其他下拉列表。没有其他下拉菜单。只有一个下拉菜单。

html

 <select name="id" id="id"></select>

jQuery

<script type="text/javascript">
    function bedrooms(){
        $('#id').empty();
        $('#id').append("<option>loading........</option>");
        $.ajax({
            type:"POST",
            url:"checking_database.php",
            contentType:"json",
            success:function(data){
                $('#id').empty();
                $.each(data,function(i,item){
                    $('#id').append('<option>"'+data[i].number_of_bedrooms+'"</option>');
                });
            },
            complete:function(){
            }
        });
    }
    $(document).ready(function(){
        bedrooms();
    });
</script>

checking_database.php

<?php
$data = array();
$con=mysqli_connect("localhost","root","","price");   
$query = mysqli_query($con,"select * from bedroom");
if(mysqli_num_rows($query)){
    while($row = mysqli_fetch_array($query)){
        $data[] = array("number_of_bedrooms" => $row['number_of_bedrooms']); 
    };
    header('Content-type: application/json');
    echo json_encode($data);
}
?>

输出

必需的输出:将数据显示为选项而不重新定义。

谁能告诉我我如何解决这个问题的答案。我正处于 ajax 和 php 的学习阶段。我也用谷歌搜索,但我找到了基于彼此的下拉列表。谢谢

【问题讨论】:

  • 您在问题中发布的代码有什么问题?
  • @Turnip 下拉菜单不显示值而不显示值
  • 您的 PHP 正在返回一个数字数组,但您的 javascript 正在尝试访问对象的 id 属性:item.id。您的浏览器控制台可能正在显示错误消息。
  • " without refresing" - 显示的代码中没有任何内容会导致页面刷新。你到底是什么意思?
  • 我希望选择选项中的数据库中的数据不进行任何刷新。你能告诉我先生我该怎么做吗? @萝卜

标签: javascript php jquery html ajax


【解决方案1】:
var last_bedroom_data
function bedrooms(){
    if(!last_bedroom_data){
        $('#id').empty();
        $('#id').append("<option>loading........</option>");
    }
    $.ajax({
        type:"POST",
        url:"checking_database.php",
        contentType:"json",
        success:function(data){
            if(last_bedroom_data==JSON.stringify(data)) // data is the same
                return; // skip rendering of html
            updateBedroomSelect(data);
            last_bedroom_data = JSON.stringify(data);
        },
        complete:function(){
        }
    });
}
function updateBedroomSelect(data){
    $('#id').empty();
    $.each(data,function(i,item){
       $('#id').append('<option>"'+data[i].number_of_bedrooms+'"</option>');
    });
}
$(document).ready(function(){
    bedrooms();
    setInterval(bedrooms,3000);
});

【讨论】:

  • @Puneet 它首先加载,但如果您更改数据库条目则不会刷新?
  • 先生,它不起作用。当它首先重新加载时,只有loading........ 不会显示其他任何东西值2 3000 后)
  • 非常感谢您的回答。你能告诉我它是如何工作的吗?
  • @Puneet 如前所述,它会检查数据的变化,然后才调用updateBedroomSelect 来更改select 的html。 the if(!last_bedroom_data) makes sure the loading....... is only displayed once, when the select is still empty.
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 2012-11-08
  • 2017-10-16
  • 2013-05-07
  • 2020-10-03
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多