未捕获的TypeError。 Item.replace不是一个函数,autoComplete插件

时间:2017-02-13 01:50:28

标签: php jquery json ajax autocomplete

我正在使用jQuery插件autoComplete https://goodies.pixabay.com/jquery/auto-complete/demo.html,我试图使用他们的ajax请求,但遗憾的是我收到了错误。

它说

  

item.replace不是object.renderItem

的函数
$.fn.autoComplete.defaults = {
    source: 0,
    minChars: 3,
    delay: 150,
    cache: 1,
    menuClass: '',
    renderItem: function (item, search){
        // escape special characters
        search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi");
        return '<div class="autocomplete-suggestion" data-val="' + item + '">' + item.replace(re, "<b>$1</b>") + '</div>';
    },
    onSelect: function(e, term, item){}
};

这是我的代码

$('.to_msg').autoComplete({
    source: function(term, response){
        $.getJSON('ajax/auto_complete_ajax.php', { q: term }, 
        function(data){ 
            response(data); 
        });
    }
});

我的PHP回复

$recipient = $_GET['q'];
$a_json = array();
$a_json_row = array();


//restrict the store
$query_filter = $db->query("SELECT * from master_data.user_account where Name like '%$recipient%'");
while($result_filter = $query_filter->whileFetch()){
    $name = htmlentities(stripcslashes($result_filter['Name']));
    $user_id = htmlentities(stripcslashes($result_filter['user_id']));    
    $a_json_row['user_id'] = $user_id;
    $a_json_row['value'] = $name;
    $a_json_row['label'] = $name;
    array_push($a_json, $a_json_row);
}

echo json_encode($a_json);
flush();

这是JSON输出

[
   {"user_id":"5","value":"Melde Feliciano   ","label":"Melde Feliciano   "},
   {"user_id":"46","value":"Melanie Charlton ","label":"Melanie Charlton "}
]

1 个答案:

答案 0 :(得分:3)

item中的

renderItem(item, search)是一个对象。尝试将item.replace()替换为item.label.replace()

$.fn.autoComplete.defaults = {
    source: 0,
    minChars: 3,
    delay: 150,
    cache: 1,
    menuClass: '',
    renderItem: function (item, search){
        // escape special characters
        search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi");
        return '<div class="autocomplete-suggestion" data-val="' + item.value + '">' + item.label.replace(re, "<b>$1</b>") + '</div>';
    },
    onSelect: function(e, term, item){}
};