javascript - 使用 PHP+MySQL 构建的对象数组的 JQuery 自动完成

标签 javascript php jquery mysql ajax

我有一个 MySQL 表,例如:

name   | id
John   | 1
Mike   | 2
Kelly  | 3

在 Jquery 中,我可以使用自动完成功能在弹出列表中显示“name”,同时在输入中插入“id”:

var names=[
    {label:"John", value:1},
    {label:"Mike", value:2},
    {label:"Kelly", value:3}
];
$('#myDiv').autocomplete({
    source: names
})

这工作正常,但现在我需要使用 PHP 重现对象“名称”数组。我正在 PHP 中尝试以下操作:

$sql ="SELECT id, nome FROM table";
    $result = $pdo->query($sql);
    $rows = $result->fetchAll(PDO::FETCH_ASSOC);

    $output=array();;

    foreach($rows as $key){
        array_push($output, array($key{"nome"}=>intval($key{"id"})));
    };

    echo json_encode($output);

返回:

[{"John":1},{"Mike":2},{"Kelly":3}]

在 Jquery 中,我现在使用 Ajax 来调用 myscript.php:

var names= [];
    $.ajax({
        url: "../myscript.php",
        success: function (response) {
            names = response.split(",");
        }
    });

但这只是在单元格中显示相同的结果:

[{"John":1},{"Mike":2},{"Kelly":3}]

所以,我猜解决方案是为 PHP 中的每个对象添加标签和值,或者什么可以解决问题?

预先感谢您的帮助!

最佳答案

您需要使用 PHP header() 方法来执行以下操作:

header('CONTENT-TYPE: application/json');
echo json_encode($output);

可能需要引用文档,以防万一我有拼写错误:)

但无论如何,一旦 JSON 的返回类型是正确的内容类型,JQuery 就会自动将该响应转换为对象数组。

[编辑]附录...问题的第二部分:

自动完成功能的工作取决于您的 IDE...而您的 IDE 取决于您所使用的同一语言中的对象定义。我使用phpStorm。因此,如果我想在 phpStorm 中为 JavaScript AJAX 返回进行自动完成工作,我必须创建一个虚拟 JavaScript 对象(这可以是代码中的任何位置,甚至是一个未使用的 JS 文件,该文件仅用于定义虚拟对象...只需拥有一个可由 IDE 解析的唯一名称):

//dummy object used for auto-completion to work
function NameObject(param, param2) {
    this.label = param;
    this.value = param2;
}

然后,在我的 AJAX 返回上,我必须输入:

success: function(response) {
    /** @var NameObject[] response */
}

我不知道有任何其他方法可以做到这一点,其效果如何取决于 IDE。我从来没有对 JavaScript 这样做过,因为它似乎比它的值(value)更多的工作。

[edit2]关于格式化 PHP 以使用命名键输出对象的附录 好吧,也许我误解了......一开始没有注意到你的标签不在你输出的 JSON 中......所以在你的 PHP 中,如果你想让 .label 和 .value 工作,你的 PHP 需要像这样生成它:

$results = array();
foreach($rows as $key){
    $obj        = new stdClass();
    $obj->label = $key['nome'];
    $obj->value = intval($key['id']);
    $results[]  = $obj;
};
echo( json_encode($results) );

或者

$results = array();
foreach($rows as $key){
    $arr          = array();
    $arr['label'] = $key['nome'];
    $arr['value'] = intval($key['id']);
    $results[]    = $arr;
};
echo( json_encode($results) );

关于javascript - 使用 PHP+MySQL 构建的对象数组的 JQuery 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582268/

相关文章:

php - 仅对关联数组的奇数元素进行排序

php - 如何将 N 个向量的每个元素相乘 N^N 次

jquery - 图片 :hover doesn't works with background-color

jquery mobile、列表、隐藏箭头图标

javascript - 从 HTML 属性数组 javascript 获取键值

javascript - 在 Vue.js 中监听 Foundation 事件?

javascript - 如何从客户的 PC 中清除缓存的网站?

php - 在 PHP 中重置/删除数组中的所有值

javascript - 从一个选择器更新多个元素?

javascript - 使用自定义变量对 Google Analytics 中的事件进行分组