Jquery JSON到数组和搜索&;在阵列内部进行替换

Jquery JSON到数组和搜索&;在阵列内部进行替换,jquery,json,jquery-ui,replace,jquery-ui-autocomplete,Jquery,Json,Jquery Ui,Replace,Jquery Ui Autocomplete,我有一个用于jQuery自动完成输入字段的小回调函数。 该函数有两个参数:输入字段中键入的term=字符串和url=生成建议的php脚本的url 剧本是这样的: function m(term,url) { var y = ''; jQuery.get(url, { term:term }, function(data){ }); return y; } 您在文本字段中键入的所有内容都将发送到php脚本,该脚本将返回一个建议列表 在函数(数据){}块中,应该发生两件事: 将J

我有一个用于jQuery自动完成输入字段的小回调函数。 该函数有两个参数:输入字段中键入的term=字符串和url=生成建议的php脚本的url

剧本是这样的:

function m(term,url) {
   var y = '';
   jQuery.get(url, { term:term }, function(data){ });
   return y;
}
您在文本字段中键入的所有内容都将发送到php脚本,该脚本将返回一个建议列表

函数(数据){}
块中,应该发生两件事:

  • 将JSON字符串编码到一个数组中(JQuery自动完成需要该数组作为返回值)。我试过:
    y=eval(“+data+”)。是这样吗?
    从PHP端生成的JSON字符串如下所示(例如term=“nur”)

    [“努里·马利基”、“努尔苏丹·纳萨尔巴乔夫”、“n\u00fcrnberger prozess”] n\u00fcrnberger是“nürnberger”的编码版本

  • 突出显示建议单词中的术语。示例:输入值为“ris”,因此建议示例应类似于
    sunrise

  • 是否有一种方法可以将类似
    .replace
    的内容用于数组


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

    有人说eval是邪恶的,你不需要将sting解析成json就可以使用

    请再看


    有关格式,请参见@DarthJDG提供的据说eval是邪恶的,您不需要将sting解析为json,只需使用即可

    请再看


    有关格式设置,请参见@DarthJDG提供的,您可以通过以下方式定义接收到的字符串为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>");
    }
    

    for(i=0,iLen=data.length;i您可以通过以下方式定义接收到的字符串为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>");
    }
    

    for(i=0,iLen=data.length;i我尝试了来自DarthJDG的链接,并按照此SO问题:

    我想是因为对Javascript/Jquery/的了解不够……我无法将该解决方案应用到我的应用程序中。我一直遇到错误“$.ui未定义”。 (对我来说)面临的挑战是:将代码与我使用的Yii框架组合放置在何处

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

    您只需注册以下脚本。在POS_加载时注册该脚本非常重要:

    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::app()->clientScript->registerScript('highlightAC','$.ui.autocomplete.prototype.\u renderItem=function(ul,item){
    item.label=item.label.replace(新的RegExp((?![^&;]+;)(?!)(?![^&;]+;),“gi”),“$1”;
    返回$(“
  • ”) .data(“item.autocomplete”,item) .append(“+item.label+”) .附录(ul); },CClientScript::POS_LOAD);
    就这样。
    (感谢Yii论坛的Antonio)

    我尝试了DarthJDG的链接,然后回答了这个问题:

    我想是因为对Javascript/Jquery/的了解不够……我无法将该解决方案应用到我的应用程序中。我一直遇到错误“$.ui未定义”。 (对我来说)面临的挑战是:将代码与我使用的Yii框架组合放置在何处

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

    您只需注册以下脚本。在POS_加载时注册该脚本非常重要:

    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::app()->clientScript->registerScript('highlightAC','$.ui.autocomplete.prototype.\u renderItem=function(ul,item){
    item.label=item.label.replace(新的RegExp((?![^&;]+;)(?!)(?![^&;]+;),“gi”),“$1”;
    返回$(“
  • ”) .data(“item.autocomplete”,item) .append(“+item.label+”) .附录(ul); },CClientScript::POS_LOAD);
    就这样。
    (感谢Yii论坛的Antonio)

    我不知道如何完整地回答您的问题(没有使用jQuery UI的经验),但是对于您的第一个问题…不要使用
    eval
    ,使用@Zirak有趣的信息,谢谢!您也可以使用
    $.getJSON()
    。这似乎是最简单的方法。我不知道如何完全回答您的问题(没有使用jQuery UI的经验),但对于您的第一个问题…不要使用
    eval
    ,使用@Zirak有趣的信息,谢谢!您也可以使用
    $.getJSON()
    。这似乎是最简单的方法。+1对于RTFM,您还可以查看以下自定义格式的SO问题:我仍然在PHP端使用json_encode。我使用yii框架中的CJSON::encode。@Bndr可能您的json不正确?下面是另一个使用jsonp的示例,请注意,在bac中,它们不需要解析json当然可以,但我从PHP端收到的JSON看起来是这样的(例如term=“nur”)[“nuri al-maliki”、“nursultan nasarbajew”、“n\u00fcrnberger prozess”]。我认为这看起来不错。@DarthJDG,所以链接我也是一个有趣的方式。我对jQuery/JS非常陌生。要实现这个想法,我只需调用函数monkyPatchAutocomplete?但我得到一个错误,“$.ui.未定义”我认为,我缺少一些基本知识。对不起。+1到RTFM,您还可以看看以下自定义格式的SO问题:我仍然在PHP端使用json_encode。我使用yii框架中的CJSON::encode。@Bndr可能您的json不正确?这里是另一个使用jsonp的示例,请注意,它们不需要PARjson返回时不确定,但我从PHP端收到的json看起来是这样的(例如term=“nur”)[“nuri al-maliki”、“nursultan nasarbajew”、“n\u00fcrnberger prozess”]。我认为这看起来不错。@DarthJDG