2

这是我的代码:

class_search.php

        case 'users':
            if(!empty($_REQUEST['user'])){                  
                if(strlen($_REQUEST['user']) >= 3){
                    $_REQUEST['user'] = $this->sanitize($_REQUEST['user'], 'string');
                    $stmt = $this->sql->prepare('SELECT
                                                        id,
                                                        nome,
                                                                                                                    url
                                                    FROM
                                                        animes
                                                    WHERE
                                                        nome LIKE ?

                                                    LIMIT 10');

                    $stmt->execute(array('%'.$_REQUEST['user'].'%'));
                    $this->queries++;
                    $c = 0;
                    if($admin){
                        $result['users'] = array();
                    }

                    if($stmt->rowCount() > 0){
                        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                            if($admin){
                                $result['users'][$c] = array('name'=>($prefix ? '[usr] ' : '').$row['nome'], 'id'=>$row['id']);
                                $c++;
                            }else{
                                $result[] = ($prefix ? '[usr] ' : '').$row['nome'];
                            }
                        }
                    }
                }
            }
            break;

通用.js

$('#top_search').typeahead({
    source: function(typeahead, query) {
        $.ajax({
            url: baseurl + "/ajax_calls.php",
            dataType: "json",
            type: "POST",
            data: {
                call: 'top_search',
                user: query
            },
            success: function(data) {
                typeahead.process(data);
            }
        });
    },
    onselect: function(obj) {
        location.href= baseurl + '/animes/'+obj;
    }
})

ajax_calls.php

        case 'top_search':
            $status = $site->process_autosearch('users');
            break

;

我在使用 onselect 时遇到问题,我需要在我的 MySQL 中选择行 url 并编码为 json,因为当我点击一个结果时,我会重定向到 mysite.com/animes/name of Anime/(是的,带空格)和我需要解决这个问题。

phpMyAdmin 中的动漫表:http: //s18.postimage.org/3ulrcmss9/Animes_Table.jpg

快速视频:http ://www.screenr.com/plZ7

4

1 回答 1

0

您将需要使用urlencode(). 在您的 class_search.php 文件中,更新此部分:

if($admin){
    $result['users'][$c] = array('name'=>($prefix ? '[usr] ' : '').urlencode($row['nome']), 'id'=>$row['id']);
    $c++;
}else{
    $result[] = ($prefix ? '[usr] ' : '').urlencode($row['nome']);
}

为了使名称在搜索自动完成中也看起来不错,您还需要修改 jQuery,将decodeURIComponent()函数包装在 obj 周围,如下所示:

onselect: function(obj) {
    location.href= baseurl + '/animes/' + decodeURIComponent(obj);
}
于 2013-02-18T08:16:28.833 回答