javascript - Bootstrap typeahead(自动完成)ajax返回多个值

标签 javascript php jquery ajax twitter-bootstrap

我使用 boostrap typhead 创建自动完成

我想在从自动完成中选择数据时显示, 返回2个值并放入输入框和隐藏数据

我发现了两个问题

  1. 使用双引号自动完成数据
  2. 我无法将 ID BIO 置于隐藏类型中

这是我的代码

PHP

<?php
include "database.php";
$query = $_REQUEST['query'];
$result = mysqli_fetch_object(mysqli_query($con,"select count(*) as total from biodata where NameBiodata LIKE '%".$query."%' "));
    if ($result->total > 0) {
        $data_tsk = mysqli_query($con,"select  IdBio,NameBiodatafrom biodata where NoUrut  NameBiodata LIKE '%".$query."%'");
        $data = array();
        while($tsk=mysqli_fetch_object($data_tsk)){ 
            array_push($data,array('label'=>$tsk->NameBiodata,'value'=>$tsk->IdBio));
        }
        echo json_encode($data);
    }
?>

Javascript

$('#name_biodata').typeahead({
          source: function (query, process) {
            $.ajax({
                url: 'ajax/auto_complete_biodata.php',
                type: 'POST',
                dataType: 'JSON',
                data: 'query=' + $('#name_biodata').val(),
                success: function(data) {
                    var results = data.map(function(item) {
                        var someItem = { myname: item.label, myvalue: item.value};
                        var jsonString = JSON.stringify(someItem.myname);  
                        return jsonString; // I don't know how to remove double qoutes
                        //return jsonString.replace(/\"/g, "");     // I try to remove double qoutes, but not selected
                    });
                    return process(results);
                }
            });
        },
        minLength: 1,
        updater: function(item) {
            var obj = JSON.parse(item);
            console.log(obj);  // i can't get Id BIO :(
            $("#IdBio").val(obj.value);
            return item;
        }
      }); 

JSON

[{"label":"Yeni Adelia Sofiyah als Selvi","value":"151"},{"label":"Yenni Ginting als Kak Yen","value":"276"},{"label":"Ria Wira","value":"572"}]

enter image description here

帮帮我谢谢

最佳答案

  1. 双引号是由 JSON.stringify 引起的。当您希望通过 HTTP 请求发送您的 JSON,将您的 JSON 作为字符串回显等时,此方法很有用。在您的情况下,只需使用 var jsonString = someItem.myname;

  2. 您的代码在这里通常是错误的。 source 应该是这样的

来源:[ {name: "name", any: "value", 你: "want"}, {name: "name2", any: "value", 你: "want"} ];

name 字段是必需的。没有它,如果您想传递对象(具有名称和其他值)而不是单个值,则 typeahead 将无法工作。在你的情况下你得到

source: ['one', 'two', 'three', 'etc'];

所以你应该这样做

  source: function (query, process) {
    $.ajax({
        url: 'ajax/auto_complete_biodata.php',
        type: 'POST',
        dataType: 'JSON',
        data: 'query=' + $('#name_biodata').val(),
        success: function(data) {
            var results = data.map(function(item) {
                var someItem = { name: item.label, myvalue: item.value}; 
                return someItem;
            });
            return process(results);
        }
    });
},

现在你会得到

[
  {name: 'name_from_label', myvalue: 'your_value'}
]

就这些。

关于javascript - Bootstrap typeahead(自动完成)ajax返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48248009/

相关文章:

jquery - Rails 4 不使用 Remotipart 远程提交表单

javascript - 如何使用新的 html 文件打开更新 Electron 浏览器窗口

php - 适当的数据结构来维护一对多关系

php - Medoo,简短的 ajax 语法

javascript - 如何使用 .each 遍历 div 中的元素?

javascript - 从 jQuery 中的 select 元素生成逗号分隔的字符串

javascript - 理解 Javascript 变量中的引用

javascript - 我可以在 chrome 控制台中使用 javascript 测试动态 html View 吗?

javascript - 禁用 rangeslider.js 中的某些范围

php - 如何使页 footer 分仅在我的 WordPress 首页中可见?