JSON到数组和搜索&替换数组内部

时间:2011-05-09 12:58:10

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

我有一个用于jQuery自动实现输入字段的小回调函数。 该函数有2个参数:term =字符串,输入到输入字段,url = php脚本的url,用于生成建议。

脚本看起来像这样:

function m(term,url) {
   var y = '';
   jQuery.get(url, { term:term }, function(data){ });
   return y;
}

您在文本字段中键入的所有内容都将发送到php脚本,该脚本会返回建议列表。

function(data){}区块内,应该发生两件事:

  1. 将JSON字符串编码为一个数组(JQuery自动完成需要它作为返回值)。我试过这个:y=eval("(" + data + ")");。这是正确的吗? 从PHP端生成的JSON字符串看起来像那样(例如term =“nur”)

    [“nuri al maliki”,“nursultan nasarbajew”,“n \ u00fcrnberger prozess”] n \ u00fcrnberger是“nürnberger”的编码版本

  2. 突出显示建议字词内的字词。示例:输入值为“ris”,因此建议示例应为sun<b>ris</b>e

  3. 有没有办法像.replace那样使用数组?

    应用程序运行在Yii框架下 - 所以我想找到一个解决方案。

3 个答案:

答案 0 :(得分:1)

据说eval是邪恶的,你不需要将刺痛解析为json只需使用json_encode

请同时查看remote example

格式化请参阅@DarthJDG提供的this thread

答案 1 :(得分:0)

您可以通过以下方式定义您收到的字符串是否为JSON:

jQuery.get(url, { term:term }, function(data){ }, "json");

然后在回调函数中查看收到的项目,并用包装的版本替换找到的字符串:

for (i=0, iLen=data.length; i<iLen; i++) {
    data[i] = data[i].replace(new RegExp(term), "<b>$1</b>");
}

答案 2 :(得分:0)

我尝试了DarthJDG的链接并按照这个SO问题:jQueryUI: how can I custom-format the Autocomplete plug-in results?

我认为由于Javascript / Jquery / ...的知识不足,我无法将该解决方案应用于我的应用程序。我一直收到错误“$ .ui is undefined”。 挑战(对我而言)是:将代码放在Yii框架的哪个位置,我使用哪一个。

所以我从Yii论坛得到了帮助,我想在这里发布明确的解决方案。

您只需注册以下脚本即可。在POS_LOAD注册它是重要的:

Yii::app()->clientScript->registerScript('highlightAC','$.ui.autocomplete.prototype._renderItem = function (ul, item) {
            item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
            return $("<li></li>")
                    .data("item.autocomplete", item)
                    .append("<a>" + item.label + "</a>")
                    .appendTo(ul);
        };',CClientScript::POS_LOAD); 

就是这样。 (感谢来自Yii论坛的Antonio)