【问题标题】:How to change dropdown options based on another dropdown selection? Values retrieved from the database [duplicate]如何根据另一个下拉选择更改下拉选项?从数据库中检索到的值 [重复]
【发布时间】:2014-04-28 16:28:11
【问题描述】:

我为此工作了几天,但找不到最终解决方案。我经历了类似的 SOF 问题,但不知道为什么我无法弄清楚。

我有三个下拉菜单。所有值(选项)都从一个称为贷款主表的表中检索。

First dropdown -> Loan type (values such as housing,personal,instant are in the table).
Second dropdown -> Loan amount (different amounts have been defined for each type)
Third dropdwon - > Interest Rate (same as second)

当用户从第一个下拉列表中选择一个选项时,只有相关选项(不是全部)必须加载到第二个和第三个下拉列表中

以下是我尝试过的代码。我首先尝试为前两个下拉菜单制作它。

<?php 
require_once "../includes/loan_master.php";

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Basic</title>
    </head>
    <body>
       Loan Type <select id="first" name="loan_master_id" class="textInput"> 
           <!--first dropdwon-->
                        <?php
                        $loans=$loan_master->find_by_sql("SELECT * FROM loan_master");
                        //this will return an array
                         foreach ($loans as $loan) {
                            echo "<option value='$loan->id'>$loan->loan_type</option> ";                           

                        }
                        ?>       

       </select>  

       Loan Amount<select id="update">
           <!--second dropdown-->


       </select>



        <script src="../javascripts/jquery-1.11.0.js"></script> 
        <script>
            $(function() {
                $("#first").change(function() {
                    var x = $("#first").val(); 
               // first dropdown value is stored              
                    fire_ajax(x);
                });

                function fire_ajax() {
                    $.ajax({
                        type: "POST",
                        dataType: "text",//is this data type corect?
                        url: "getter.php", 
//getter.php is this file. All are in the same file
                        success: function(res) {
                            $("#update").html("<option>"+res+"</option>");//options are added to second dropdwon
                        }

                    })
                }



            });


        </script>
    </body>
</html>

<?php
//php code 
if (isset($_POST)) { 
    $x=$_POST; // I feel something is wrong here
    $loans=$loan_master->find_by_sql("SELECT * FROM loan_master WHERE id=".$x);


} 
?>

我真的需要让这段代码工作。任何建议都非常感谢

P:S 我得到的错误

查询失败:“where 子句”中的未知列“数组” 上次执行的查询:SELECT * FROM loan_master WHERE id=Array

注意:第 68 行 C:\wamp\www\loan_mgmt\admin\getter.php 中的数组到字符串转换

进一步更新

getter.php 就是这个文件。 (同一个文件,在 HTML 之后有一个 php 块)。正如你所说,我已经更改了代码。

<?php
if (isset($_POST["loan_master_id"])) { 
    $x=$_POST["loan_master_id"]; // I feel something is wrong here
    $loans=$loan_master->find_by_sql("SELECT loan_amount FROM loan_master WHERE id=".$x);    
    foreach ($loans as $$loan) {
        echo "<option value='$loan->id'>$loan->loan_amount</option>";
    }


} 
?>

这是成功的部分

success: function(res) {
                            $("#update").html("<option>"+res+"</option>");//options are added to second dropdwon
                        }

我现在没有收到任何错误。发生的情况是第二个下拉列表为空。未显示任何选项

【问题讨论】:

  • 三个下拉菜单共有多少个选项?我问是因为如果它只有几个(比如说
  • @Daniel Gimenez - 选项不是静态的。在贷款主表中,管理员可以在未来添加一个名为“ABC”的贷款类型并定义其金额和利率。
  • 我并不是真正的 Ajax 专家,所以有时我无法理解可能为类似问题提供的答案。
  • 这里提供的答案也可能不容易理解。您无需成为 AJAX 方面的专家,您只需了解它的工作原理即可。
  • @Jay- 是的,我尽力理解了一些,这就是我想出自己的答案的方式,我仍在尽我所能

标签: javascript php jquery ajax drop-down-menu


【解决方案1】:

好吧,您的 ajax 调用的结果将作为单一响应发回。然后,您将整个响应放入单个选项标签中

 $("#update").html("<option>"+res+"</option>");//options are added to second dropdwon

如果您的 ajax 调用以与上述代码相同的方式返回响应

 foreach ($loans as $loan) {
             echo  <option value='$loan->id'>$loan->loan_type</option>";                           

                    }

然后你就可以做类似...

document.getElementById('update').innerHTML=res;

编辑

至于您的错误,我需要查看 getter.php 来给您确切的说明,但基本上它是说它无法在数据库中找到您要查找的内容。您的 ajax 调用没有失败,您的数据库查询失败了。

我的猜测是您忘记通过 ajax 将任何参数传递给您的 getter.php 代码。您可以在 http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp 了解如何从 ajax 传递信息。

编辑 2

您的 PHP 正在返回一个看起来像的单个文本字符串

<option value='id'>bla blah</option><option value='id'>bla blah</option><option value='id'>bla blah</option><option value='id'>bla blah</option>

换句话说,一次所有选项。然后,您将这些选项放入单个选项标签中。

只需执行...即可检查 ajax 的结果。

alert(res);

如果它显示一个字符串是一堆选项标签,你不应该把它们放在另一个选项标签中。就在他们的选择标签之类的..

document.getElementById('update').innerHTML=res;

如果字符串为空并且 alert 没有显示任何内容,则表示您的数据库查询未找到任何匹配项并返回空。

【讨论】:

  • 你能告诉我我是否在php代码中正确使用了$_POST,因为查询中有错误。它没有达到我的预期。请查看上述错误(稍后编辑)
  • @ user2782001-我现在没有收到任何错误,并按照您所说的更改了代码。请在我的问题中查看更多更新。现在我的第二个下拉列表是空的?这是为什么呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2012-07-23
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多