对 Ajax 脚本的任何更改都会产生未捕获的类型错误


Any Changes to an Ajax script produces an Uncaught TypeError

我在这里简直要疯了。我有一个 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 ......但我所做的任何更改都会产生未捕获的类型错误:无法读取空错误的属性"0"。对我来说没有任何意义,为什么我尝试的任何东西都不起作用。

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);
}

请尝试更改:

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

CONCAT("first_name", ' ', "last_name")
显然,这

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

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