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

使用json数据自动完成的jqGrid工具栏搜索

子车桐
2023-03-14
问题内容

我发现Oleg提供了一个非常不错的演示(http://www.ok-soft-
gmbh.com/jqGrid/FillToolbarSearchFilter.htm),该演示显示了“使用本地数据自动完成的jqGrid工具栏搜索”,但是很难使它起作用通过ajax获取json
即使我在加载后强制将网格置于本地,也有充分的理由为什么自动完成功能不起作用?

$(document).ready(function() {

    var mygrid = $("#mylist"),
    mygetUniqueNames = function(columnName) {
        var texts = mygrid.jqGrid('getCol',columnName), uniqueTexts = [],
            textsLength = texts.length, text, textsMap = {}, i;
        for (i=0;i<textsLength;i++) {
            text = texts[i];
            if (text !== undefined && textsMap[text] === undefined) {
                // to test whether the texts is unique we place it in the map.
                textsMap[text] = true;
                uniqueTexts.push(text);
            }
        }
        return uniqueTexts;
    };





    mygrid.jqGrid({
            url:'autocompleteTest.php',
            datatype: "json",
            colNames:['name', 'City','stateCd'],
            colModel:[                      
                    {name:'name',index:'name',width:225, search: true},
                    {name:'City',index:'City',width:125},
                    {name:'stateCd',index:'stateCd',width:75},
                  ],

         rowNum: 100,
        loadonce : true,
         sortname: 'name',
        sortorder: 'desc',
         sortable: true,
        viewrecords: true,
        rownumbers: true,
        sortorder: "desc",
        ignoreCase: true,
        pager: '#mypager',
        height: "auto",
        caption: "How to use filterToolbar better with data from server"
    }).jqGrid('navGrid','#mypager',
              {edit:false, add:false, del:false, search:false, refresh:false});

    mygrid.jqGrid('setColProp', 'name',
            {
                searchoptions: {
                    sopt:['bw'],
                    dataInit: function(elem) {
                        $(elem).autocomplete({
                            source:mygetUniqueNames('name'),
                            delay:0,
                            minLength:0
                        });
                    }
                }
            });

    mygrid.jqGrid('filterToolbar',
            {stringResult:true, searchOnEnter:true, defaultSearch:"bw"});

    });

问题答案:

如果使用sourcejQuery UI Autocomplete 的远程参数,则很难提供示例。主要问题是您的问题是关于jqGrid的,它是
纯JavaScript
解决方案。如果我们要讨论解决方案的服务器部分,我们将有太多选择。许多用户使用不同的语言:Java,C#,VB,PHP等。例如,我个人更喜欢C#。然后,我们必须选择使用的技术:ASP.NET
MVC,WCF,ASPX Web服务等。例如,我将选择WCF。然后,我们应该定义数据库访问技术,例如Entity Framework,LINQ to SQL
SqlDataReaderSqlDataAdapter等等。让我们选择实体框架,并为您提供相应的代码示例,但是如果使用PHP和MySQL这样的示例,它并不会真正帮助您。

因此,我只描述 没有任何代码*source的jQuery UI Autocomplete 远程参数的服务器应该具有哪个接口。 *

您应该在我的示例中将source参数替换为服务器url,如下所示:

dataInit: function(elem) {
    $(elem).autocomplete({
        source:'yourSearchUrl.php',
        minLength:2
    });
}

如果用户键入两个字符(可以通过minLength选项更改值),例如“ ab”,则自动完成将发出带有参数的HTTP GET请求term=ab

yourSearchUrl.php?term=ab

您的服务器应以与本地源相同的格式回答JSON数据。我在前面的示例中使用了字符串数组格式。另一种受支持的格式是具有标签/值/两个属性的对象数组,例如

[
    {
        "id": "Dromas ardeola",
        "label": "Crab-Plover",
        "value": "Crab-Plover"
    },
    {
        "id": "Larus sabini",
        "label": "Sabine`s Gull",
        "value": "Sabine`s Gull"
    },
    {
        "id": "Vanellus gregarius",
        "label": "Sociable Lapwing",
        "value": "Sociable Lapwing"
    },
    {
        "id": "Oenanthe isabellina",
        "label": "Isabelline Wheatear",
        "value": "Isabelline Wheatear"
    }
]

阅读文档以获取更多信息。

如果您需要实施更复杂的方案并以任何方式将一些其他数据发送到服务器或转换服务器响应,则可以使用自定义源回调函数。在这种情况下,您应该使用source: function(request, response) {/*your implementation*/},其中request将会是具有term属性(request.term)的对象。在实现内部,您应该手动向服务器发出ajax请求。该response会回调函数,你应该打电话
后您的自定义Ajax请求
将完成(内部success事件处理程序)。该response函数应使用参数进行调用,该参数应为与mygetUniqueNames返回相同格式的数组。我建议您检查jQuery
Autocomplete 演示中的源代码。

为了能够从表格的一列中提供唯一的数据,您应该只使用SELECT DISTINCT大多数数据库都支持的SQL语句。

希望我的描述对您有所帮助。

更新*
:如果您有本地资源,则可以在我以前使用的答案中找到解决方案。您只需要 在填充源数组后
调用filterToolbar
。因为您是从服务器加载数据,所以应该将filterToolbar的调用移到loadComplete内部。您可以使用该开关的jqGrid选项从对第一个数据加载后。因此,您可以在网格的loadComplete事件处理程序中包含如下代码:
*loadonce:true``datatype``'json'``'local'

var grid = $('#list');
grid({
    url:'autocompleteTest.php',
    datatype: 'json',
    loadonce: true,
    // ... other parameters
    loadComplete: function(data) {
        if (grid.getGridParam('datatype') === 'json') {
            // build the set 'source' parameter of the autocomplete
            grid.jqGrid('setColProp', 'name', {
                searchoptions: {
                    sopt:['bw'],
                    dataInit: function(elem) {
                        $(elem).autocomplete({
                            source:mygetUniqueNames('name'),
                            delay:0,
                            minLength:0
                        });
                    }
                }
            });
            mygrid.jqGrid('filterToolbar',
                          {stringResult:true,searchOnEnter:true,
                           defaultSearch:"bw"});
        }
    }
});

如果您需要从服务器重新加载数据(更改为datatypeto
'json'并调用grid.trigger('reloadGrid')),则必须更改上面的代码,以便首先使用破坏autocomplete小部件,$('#gs_name').autocomplete('destroy')然后再使用相同的代码(如内)来再次创建它dataInit



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

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

  • 我有一个弹性搜索索引与以下文档,我希望有一个自动完成功能在指定的字段: 制图:https://gist.github.com/anonymous/0609B1D110D91DCEB9A90FAA76D1D5D4 1)暗示者自动完成: https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-suggesters-compl

  • 问题内容: 我的PHP代码将JSON数据返回到jquery自动完成功能,但是自动完成功能不起作用 jQuery自动完成 PHP代码 JSON数据输出 在输入“ Ga”时,我在前端得到了空的li标签。 问题答案: 从: http://jqueryui.com/demos/autocomplete/ 您的JSON需要包含或(或两者)。更改为,它应该可以正常工作。

  • 问题内容: 我已经看到许多有关通过JSON传递带有标签和值属性的数组的问题,但关于传递字符串的问题并不多。我的问题是我似乎无法填写自动填充内容。我运行了一个转储函数,并通过JSON将这些样本值传递给自动完成功能: 这是一些代码: 这是fill_id.php: 我的自动完成功能保持空白。如何更改JSON数组以填充它?还是我的ajax成功函数中包含什么? 问题答案: 您可以非常坚持jQueryUI的自

  • 问题内容: 我正在对具有字符串类型数组的文档字段进行自动完成建议。我的文件如下所示; 我正在 标签 字段上执行自动完成搜索。我的查询就像; 当用户键入“ word”时,我要显示“ wordland”和“ wordpress”。但是,我无法做到这一点。 您能帮上忙吗? 谢谢 问题答案: 您是否尝试过完成建议?解决问题的一种方法如下: 1)创建索引: 2)使用完成建议者类型创建映射: 3)添加文件: