2

我要疯了。我有一个 ajax.php 文件,用于从名为“联系人”的表中自动完成姓名列表。脚本部分如下:

dispatch('/ajax/contacts/list', 'ajax_list_contacts');
function ajax_list_contacts() {
    $user = new User(SessionManagement::get_logged_in());
    $gid = $user->get_field('fKeyGroup');

    $q_cons = mysql_query("SELECT '_id', CONCAT(first_name, ' ', last_name) AS `Name`
                                FROM `contacts`
                                LEFT JOIN `contact_type_options` ON contact_type_options._id = contacts.fKeyContactDetail
                                WHERE (
                                    contacts.fKeyGroup = '{$gid}' AND contact_type_options.type = '2'
                                )")
                                or die(ErrorLog::handle(mysql_error()));

    $out = array();
    while (($row = mysql_fetch_assoc($q_cons)) != null) {
        $out[] = $row;
    }

    echo json_encode($out);
}

上面的脚本被调用:

$(function() {
    $.ajax({
            success: function(data) {
            var names = [];
            data = JSON.parse(data);
            for (var i in data) {
                names.push(data[i].Name);
            }
            $('[name=form-referral]').autocomplete(names);
        },
        url: '/ajax/contacts/list'
    });

这完美地工作,并且最初仅用于具有contact_type_option = 2的呼叫记录。现在,我想包括所有联系人,而不管联系人类型选项如何。

我试图完全更改代码以从“联系人”表中提取所有联系人,我尝试删除下面显示的脚本部分。我试图将 = '2' 更改为 != '3' (因为只有 1-3 种不同的类型,我不在乎是否包括类型 3)我主要对类型 1 和 2 感兴趣,但是如有必要,我将接受 1,2 和 3……但我所做的任何更改都会产生 Uncaught TypeError: Cannot read property '0' of null 错误。为什么我没有尝试任何工作对我来说没有任何意义。

AND contact_type_options.type = '2'

我也试过下面的代码:

dispatch('/ajax/contacts/list', 'ajax_list_contacts');
function ajax_list_contacts() {
    $user = new User(SessionManagement::get_logged_in());
    $gid = $user->get_field('fKeyGroup');

    $q_cons = mysql_query("SELECT `_id`, CONCAT(`first_name`, ' ', `last_name`) AS `Name`
                                FROM `contacts`
                                WHERE `fKeyGroup` = '{$gid}'")
                                or die(mysql_error());

    $out = array();
    while (($row = mysql_fetch_assoc($q_cons)) != null) {
        $out[] = $row;
    }

    echo json_encode($out);
}
4

1 回答 1

0

请尝试更改:

CONCAT(`first_name`, ' ', `last_name`)

CONCAT("first_name", ' ', "last_name")

显然这不会返回正确的数据,但它会告诉您数据中是否存在非 UTF8 字符,这可能会导致 JSON 编码出现问题,因为 JSON 仅支持 UTF8 字符。

显然,确保数据库中的数据正确 UTF8 是最佳实践,但如果您需要快速修复,您可以使用此正则表达式在做什么来删除非 UTF8 字符?

于 2012-06-21T05:58:54.903 回答