【问题标题】:jQueryUI autocomplete JSON not returning expected datajQueryUI 自动完成 JSON 未返回预期数据
【发布时间】:2014-01-30 19:58:21
【问题描述】:

使用 jQueryUI 自动完成功能搜索 MySQL 数据库。当用户在搜索字段中按下回车键时,我想用从 DB 返回的结果填充一个 div。

代码有效并且确实返回了一个自动完成的建议列表。

但是,select: 函数中返回的 JSON 数据不是我所期望的。

在下面的 PHP 代码示例中,查询从数据库中请求与查询匹配的每个标题相关的所有字段。应该还有其他字段,例如作者、出价、isbn、流派等。但是,只返回了 title 字段。

Google Chrome 的控制台如下所示:

Object {item: Object}
  item: Object
    label: "Much Obliged Jeeves"
    value: "Much Obliged Jeeves"
    __proto__: Object
  Object {label: "Much Obliged Jeeves", value: "Much Obliged Jeeves"}

其他字段在哪里?

我的 jQuery:

$('#srxbks').autocomplete({
    source: "autocomplete_test.php",
    minLength: 1,
    select: function( event, ui ) {
        console.log(ui);
        console.log(ui.item);
        console.log(ui.item.label);

        //Not working:
        var out = 'Title: ' + ui.item.title + '<br>';
        out += 'Author: ' + ui.item.author + '<br>';
        $('.booksTableDIV').val(out);
    }
});

我的 PHP:

<?php
include 'connect.php';

$term = strip_tags($_GET['term']);//retrieve search term sent by autocomplete

$qstring = "SELECT * FROM `books` WHERE `title` LIKE '%" .$term. "%'";
$query = mysql_query($qstring) or die(mysql_error());

while ($row = mysql_fetch_array($query)) {
    $row['title']=htmlentities(stripslashes($row['title']));
    $row['bid']=(int)$row['bid'];
    $row_set[] = $row['title'];
}
echo json_encode($row_set);

【问题讨论】:

  • 虽然对象中只有标签和值属性。还是我错过了什么?
  • 你的PHP只输出title变量而不是bid变量。

标签: php jquery json jquery-ui


【解决方案1】:

您只需要确保所有变量都包含在返回数组中。您的 PHP 是有问题的部分,您没有正确地将变量传输到 JSON。你的 jQuery 很好。以下是您希望发送回 jQuery 的每个额外变量需要执行的操作。

// Initialize your variables here
$returns = array();
$i = 0;

while ($row = mysql_fetch_array($query)) {
    // Format your variables here
    $row['title']=htmlentities(stripslashes($row['title']));
    $row['bid']=(int)$row['bid'];

    // Enter results into JSON array here
    $returns[$i]['title'] = $row['title'];
    $returns[$i]['bid'] = $row['bid'];
    $i++;
}

echo json_encode($returns);

【讨论】:

  • 或者你可以在最后尝试$returns[] = $row;
  • 非常感谢。 Following comments are for future readers: Foo_Chow 是正确的,我需要在制作数组时指定标题,如:$returns['title'] = $row['title'];。但是,此时添加其他字段会将它们添加到自动完成下拉列表中,这是不可取的。 相反,当用户按 Enter 时,我将使用返回的标题数据在 @ 中进行 ajax 调用987654325@ 函数,并使用 Foo_Chow 在 that PHP 文件中的确切代码返回所有需要的字段并更新结果 DIV。再次感谢 Foo Chow 的帮助。 +1 并接受。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2014-09-12
  • 2013-03-08
相关资源
最近更新 更多