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")

明らかに、それは正しいデータを返しませんが、JSONはUTF8文字のみをサポートするため、データにUTF8以外の文字が含まれているかどうかがわかり、JSONエンコーディングで問題が発生する可能性があります。

明らかに、データベース内のデータが正しいUTF8であることを確認するのがベストプラクティスですが、迅速な修正が必要な場合は、この正規表現でUTF8以外の文字を削除できます。

于 2012-06-21T05:58:54.903 に答える