如何解析我的json以获取jquery ui自动完成功能

时间:2014-11-07 13:24:38

标签: jquery json jquery-ui

json从动态php函数返回,看起来像

 [{"tagid":"1","name":"scandalous"},{"tagid":"2","name":"crime"},{"tagid":"3","name":"entertainment"},{"tagid":"4","name":"finance"}]

文本输入应使用名称字段。 自动填充称为

$(document).on("focus", "#tagfilter", function(event) {
$(this).autocomplete({
source:  "/app/processes/tags.php?f=get_json_tags"
});

});

但我无法让自动完成工作

为任何协助而欢呼。

3 个答案:

答案 0 :(得分:0)

您可以使用jQuery map将起始项数组或对象转换为新的项目数组,而不是使用grep应用输入过滤器。

当前过滤器存储在requestsource函数参数中。

代码:

$(this).autocomplete({
    source: function (request, response) {
        var re = $.ui.autocomplete.escapeRegex(request.term);
        var matcher = new RegExp("^" + re, "i");
        $.getJSON("/app/processes/tags.php?f=get_json_tags", function (data) {
            response($.grep(($.map(data, function (v, i) {
                return {
                    label: v.name,
                    value: v.name
                };
            })), function (item) {
                return matcher.test(item.value);
            }))
        });
    }
});

答案 1 :(得分:0)

请参阅此示例了解json remote datasource

因此,您的代码应为:

$(this).autocomplete({
    source: function( request, response ) {
        $.ajax({
          url: "/app/processes/tags.php?f=get_json_tags",
          dataType: "jsonp",
          data: {
            q: request.term
          },
          success: function( data ) {
            response( $.map(data, function(v,i) { 
                    return { label: v.name, value:v.name }; 
                 }) 
            );
          }
        });
      }//[,
      //other: "options",
      //may: "be included",
      //right: "here" ]
});

答案 2 :(得分:0)

是否可以从2个不同的字段返回值?

例如,现在该示例仅返回“v.name”。有没有办法让自动填充更通用,如果有人输入匹配的年龄,还会返回“v.age”吗?

我不确定如何返回找到的值。

return { label: v.name, value:v.name }; 
return { label: v.age, value:v.age };