使用jQuery.getJSON成功函数来更改JSON结果

时间:2014-07-28 03:24:02

标签: jquery json jquery-ui getjson jquery-ui-autocomplete

我正在使用带有autocomplete的JQuery UI JSON remote source小部件。如果我输入" ba"例如,自动完成需要一个字符串数组,例如[" bat"," banana"," band"," bar"]。但是,我获取此信息的远程函数非常复杂,它返回如下内容:

{ "prefix": "ba",
  "weblog": "gmazza",
  "tagcounts": [
    { "tag" : "bat", "count" : 2 }, 
    { "tag" : "banana", "count" : 1 }, 
    { "tag" : "band", "count" : 1 }, 
    { "tag" : "bar", "count" : 1 }
  ]
}

...要求我去第三个元素"标记"并收集字符串"标记"的值并返回这些值的数组。当然,最明智的解决方案是将该功能更改为自动完成可直接使用的格式,但我想学习如何使用JQuery编写解析函数来更改返回的JSON数组的格式,即,为:

.autocomplete({
    source: function(request, response) {
        $.getJSON("myURL", { term: 'ba' }, function(data) {...});
    },
    ...
});

我如何创造成功"函数(数据)将给我自动完成所需的数组?任何提示,建议和代码示例都会受到赞赏,这比我想象的更难以搜索网络。我遇到的一个特殊问题是,我看到的大多数成功函数只是输出到控制台或创建HTML元素,我需要它返回一个值(JSON数组),它将被用作"响应&# 34;以上是我的源函数。

1 个答案:

答案 0 :(得分:0)

要使自动填充工作正常,您需要设置label并且它是相应的value。因为你有以下格式的JSON,

{ "prefix": "ba",
  "weblog": "gmazza",
  "tagcounts": [
    { "tag" : "bat", "count" : 2 }, 
    { "tag" : "banana", "count" : 1 }, 
    { "tag" : "band", "count" : 1 }, 
    { "tag" : "bar", "count" : 1 }
  ]
}

我相信tagcounts.tag必须是label,而且价值我不知道。

因此,请在自动填充source中使用此内容,

source: function (request, response) {
    $.getJSON("myURL", { term: 'ba' }, function(data) {
                        response($.map(data.tagcounts, function (dataValue) {
                            return {
                                //Display label
                                label: dataValue.tag,
                                /autocomplete value
                                value: dataValue.tag
                            };
                        }))
      });