当前位置: 首页 > 面试题库 >

jQuery UI使用JSON和Ajax自动完成

白星海
2023-03-14
问题内容

我已经看到许多有关通过JSON传递带有标签和值属性的数组的问题,但关于传递字符串的问题并不多。我的问题是我似乎无法填写自动填充内容。我运行了一个转储函数,并通过JSON将这些样本值传递给自动完成功能:

0: 23456
1: 21111
2: 25698

这是一些代码:

$("#auto_id").autocomplete( {
    source: function(request,response) {

        $.ajax ( {
          url: "fill_id.php",
          data: {term: request.term},
          dataType: "json",
          success: function(data) {
            //what goes here?
                 } 
    }) }
   });

这是fill_id.php:

$param = $_GET['term'];
$options = array();


$db = new SQLite3('database/main.db');
    $results = $db->query("SELECT distinct(turninId) FROM main WHERE turninid LIKE '".$param."%'");


while ($row_id = $results->fetchArray()) {
        $options[] =  $row_id['turninId']; 
    }   
echo json_encode($options);

我的自动完成功能保持空白。如何更改JSON数组以填充它?还是我的ajax成功函数中包含什么?


问题答案:

您可以非常坚持jQueryUI的自动完成功能的远程演示:http : //jqueryui.com/resources/demos/autocomplete/remote-
jsonp.html

为了使结果进入自动完成列表,您需要在ajax成功函数中放置一个带有标签和响应参数(实际上是一个函数)值的对象:

source: function( request, response ) {
    $.ajax({
        url: "fill_id.php",
        data: {term: request.term},
        dataType: "json",
        success: function( data ) {
            response( $.map( data.myData, function( item ) {
                return {
                    label: item.title,
                    value: item.turninId
                }
            }));
        }
    });
}

但这仅在您稍微修改fill_id.php时有效:

// escape your parameters to prevent sql injection
$param   = mysql_real_escape_string($_GET['term']);
$options = array();

// fetch a title for a better user experience maybe..
$db = new SQLite3('database/main.db');
    $results = $db->query("SELECT distinct(turninId), title FROM main WHERE turninid LIKE '".$param."%'");

while ($row_id = $results->fetchArray()) {
    // more structure in data allows an easier processing
    $options['myData'][] = array(
        'turninId' => $row_id['turninId'],
        'title'    => $row_id['title']
    ); 
}

// modify your http header to json, to help browsers to naturally handle your response with
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

echo json_encode($options);

当然,当您的表中没有标题或任何内容时,也可以仅保留响应,并在成功回调中重复id。重要的是,您需要response在自动完成功能中使用值/项目对来填充功能:

// this will probably work without modifying your php file at all:
response( $.map( data, function( item ) {
    return {
        label: item,
        value: item
    }
}));

编辑:将引用链接更新为新的jquery UI的自动完成ui



 类似资料:
  • 问题内容: 也许您可以解决一些Ajax问题。 我有AUTO COMPLETE代码-我输入城市名称,该代码会自动为我完成城市名称,还获取城市ID,并应将其放入隐藏的输入字段中(名称=“ cityID”)…但它没有做到这一点。 你能告诉我为什么吗? html代码: 服务器端(仅输出): 脚本: 您可以在这里找到完整的JS: 问题答案: 尝试对ajax_response_city使用div而不是span

  • 问题内容: 好吧,我一直在为此绞尽脑汁(这太糟糕了),但是我一直尝试阅读我所能而且仍然无法使它起作用的内容。 试图用jQuery UI做自动完成 我的json看起来像这样 我正在尝试将此信息用作自动完成的来源。我得到的响应对象很好,我很难以正确的格式获得它,因此我可以将“ ”放在与“值”相关联的隐藏字段中,该字段需要显示为“值”的一部分落下。 尝试了一百万种不同的方法,但最近的尝试却在下面 请多谢

  • 问题内容: 想象一个具有以下数据的json文件: 我希望使用jQuery的自动完成方法,能够将 颜色 显示为选项,以选择并在输入上插入 值 。 以上不需要介绍。用于选择颜色,具有 颜色 值和具有 值 value的选择器。 编辑: 我有此JSON数据: 和这个HTML: 而这个jQuery: 我遵循安德鲁的回答,它提示我选择数据,但是如果我发出警报和变量,它会显示“未定义”。我想念什么? Edit2

  • 问题内容: 我正在尝试找到一种将jQuery自动完成与回调源结合使用的方法,该回调源通过ajax json对象列表从服务器获取数据。 有人可以给些指示吗? 我用谷歌搜索,但找不到完整的解决方案。 问题答案: 带有源代码的自动完成文档中的完美示例。 jQuery HTML

  • 问题内容: 我需要有关JQuery UI自动完成功能的帮助。我希望我的文本字段()显示来自AJAX请求的名称。这就是我所拥有的: 很感谢任何形式的帮助。 问题答案: 在您的AJAX回调内部,您需要调用该函数;传递包含要显示项目的数组。 如果响应JSON与jQueryUI自动完成功能接受的格式不匹配,则必须在将结果传递给响应回调之前在AJAX回调内部转换结果。

  • 我正在使用materialize autocomplete插件创建带有autocomplete的多个标记输入。插件工作良好,但仅用于作为预先定义的数组传递的数据。如果数据是从ajax调用传递的,则插件不会显示带有选项的下拉列表,就好像没有结果一样。有结果事实上,他们被缓存(使用缓存选项),并显示为下拉只有在重新键入搜索短语。 总而言之,autocomplete插件不会等待ajax完成其请求并交付数