简体   繁体   English

如何获取 select 选项上的多个值并使用 ajax 以输入类型显示?

[英]How to fetch mutiple values on select option and display in input type using ajax?

I'm trying to fetch mutiple values from database using ajax php.我正在尝试使用 ajax php 从数据库中获取多个值。 I've a select option(value is fetching from database), and if i select any option then i want to display the related data which is matching with the id of the the current option.but currently i'm able to fetch only one data column from databse.我有一个 select 选项(值是从数据库中获取的),如果我是 select 任何选项,那么我想显示与当前选项的id匹配的相关数据。但目前我只能获取一个数据库中的数据列。 I'm writing my current code please have a look at it and let me know how can i modify it.我正在编写我当前的代码,请查看它并让我知道如何修改它。

My select option:-我的 select 选项:-

<select data-placeholder="Choose a Vehicle..." class="chosen-select form-control" tabindex="-1" name='vno' onChange="getCity(this.value);" id="vno"  required='true' >
    <option value="">Select</option>
    <?php
        foreach($results as $vd) { ?>

    <option value='<?php echo $vd['id'];?>'><?php echo $vd['vno'];?></option>";

    <?php } ?>
</select>

and the js file和js文件

// Fetch city from Database
function getCity(val) {
    $.ajax({
        type: "POST",
        url: "retrive_data.php",
        data:'id='+val,
        success: function(data){
            $("#rate").html(data);
        }
    });
}

retrive_data.php retrive_data.php

<?php
require_once ("dbController.php");
$db_handle = new DBController();
if (! empty($_POST["id"])) {
    $query = "SELECT * FROM tbl_vehicle WHERE id = '" . $_POST["id"] . "' ";
    $results = $db_handle->runQuery($query);
    ?>

<?php
    foreach ($results as $city) {
        ?>
<option value="<?php echo $city["rate"]; ?>"><?php echo $city["rate"]; ?></option>
<?php
    }
}
?>

Change your js code as below改变你的js代码如下

  // Fetch city from Database
    function getCity(val) {
        $.ajax({
            type: "POST",
            url: "retrive_data.php?id=" + val,
            success: function(data){
                $("#rate").html(data);
            }
        });
    }

I'm making some assumptions about the desired result, and I'm not sure what the connection is between vehicles and city rates... but there are multiple issues here.我正在对期望的结果做出一些假设,我不确定车辆和城市费率之间的联系是什么……但这里有多个问题。 Let's work through them:让我们来看看它们:

<select data-placeholder="Choose a Vehicle..." class="chosen-select form-control" tabindex="-1" name='vno' id="vno"  required='true' >
    <option value="">Select</option>
    <?php foreach($results as $vd): ?>
    <option value="<?= $vd['id']?>" ><?= $vd['vno'] ?></option>";
    <?php endforeach; ?>
</select>

<!-- add a landing spot for the data coming in -->
<select id="rate"></select>

Nothing major here, just took out the onChange (typical practice is to have a listener in the JavaScript. Separation of concerns)这里没什么大不了的,只是取出了onChange(典型的做法是在JavaScript中有一个监听器。关注点分离)

In your JavaScript, I don't think you were successfully passing the id.在您的 JavaScript 中,我认为您没有成功通过 id。 It should be a JavaScript object.它应该是 JavaScript object。 Also, send data to a function that knows how to put the data in your form:此外,将data发送到知道如何将数据放入表单的 function:

// Fetch city from Database
function getCity(val) {
    $.ajax({
        type: "POST",
        url: "retrive_data.php",
        data:{id: val},
        success: function(data){
            showRate(data);
        }
    });
}

Monitor the select for a change.监控 select 是否有变化。 (JavaScript should be inside document ready block) (JavaScript 应该在文档就绪块内)

$('#vno').on('change', function (){
    getCity($(this).val());
});

Function to display the results of your ajax call: Function 显示您的 ajax 调用的结果:

showRate(data) {

    // this lets you see the data that was returned 
    console.log(data);

    var rate = $('#rate');

    // clear current content 
    rate.html('');

    // create options, assuming this is a select 
    $.each(data, function() {
        rate.append($("<option />").val(this.rate).text(this.rate));
    });
}

retrieve.php检索.php

Need to use prepared statements, and sending data as json instead of html is recommended需要使用prepared statements,并且推荐使用json而不是html发送数据

<?php

// sending json (data), not html (presentation)
header('Content-Type: application/json');

require_once ("dbController.php");
$db_handle = new DBController();
if (! empty($_POST["id"])) {

    // substituting variables in a query is a big no-no
    // $query = "SELECT * FROM tbl_vehicle WHERE id = '" . $_POST["id"] . "' ";

    // must use placeholders / prepared statement 
    $query = "SELECT * FROM tbl_vehicle WHERE id = ?'";

    // check your database object for how to do prepared statements and row fetching. If it doesn’t do prepared statements, dump it!
    $stmt = $db_handle->prepare ($query);
    $stmt->execute($_POST["id"]);

    $out = array();
    while($row = $stmt->fetch() ) {
        $rate = $row['rate'];

        $out[] = array(
            'rate'=>$rate
        );
    }

    die(json_encode($out));
}

Caveat: all code is off the top of my head, and typed on a phone.警告:所有代码都在我的脑海中,并在手机上输入。 Syntax errors are likely.可能有语法错误。 This is intended to show concepts and ideas for further research这是为了展示进一步研究的概念和想法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM