我在这里简直要疯了。我有一个 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 字符?