3

テキスト入力から値の提案が表示されないのはなぜですか。JSON と jQuery で既にオートコンプリート コードを使用しています。しかし、テキスト入力に値が表示されません

bookstore/views/admin/auto_complete.php

<script>
    $('#swSearch').keypress(function () {
        var dataObj = $(this).closest('form').serializeArray();
        $.ajax({
            url: 'http://localhost/boostore/admin_d_book_groups/search',
            data: dataObj,
            dataType: 'json',
            success: function (data) {
                $("#suggestion_tab").html('');
                $.each(data.name, function (a, b) {
                    $("#suggestion_tab").append('<li>' + data.b + '</li>');
                });
                // Display the results
                ///alert(data);
            },
            "error": function (x, y, z) {
                // callback to run if an error occurs
                alert("An error has occured:\n" + x + "\n" + y + "\n" + z);
            }
        });
    });  
</script>
<div id="swSearch">
<form>
    <input type="text" value="" id="swSearch"  class="swSearch" />
</form>
    <div class="suggestion_tab" id="suggestion_tab"></div>

</div>

Admin_d_book_groups コントローラー

function search(){
        $searchterm = $this->input->post('search_hotel');
        echo json_encode($this->d_book_groups->sw_search($searchterm));
    }  

d_book_groups_model

function sw_search($searchterm)
    {
         $query = $this->db->order_by("bg_id", "desc")->like('bg_name', $searchterm, 'after')->get('d_book_groups');
        $data = array();
        foreach ($query->result() as $row)
        {
           $data[] = $row->bg_name;
        }
        return $data;             
        //return mysql_query("select * from hotel_submits where name LIKE '".$searchterm."'");
    }  
4

2 に答える 2

2

あなた$config['compress_output'] = TRUE;の中にありますapplication/config/config.phpか?

そうである場合、コントローラ メソッドからコンテンツを直接出力することはできません。ビューを使用する必要があります。次のような単純なビューを作成できます。

<?php echo $response;

次のようにjsonデータを渡すだけです。

function search() 
{
    $searchterm = $this->input->post('search_hotel');
    $data['response'] = json_encode($this->d_book_groups->sw_search($searchterm));
    $this->load->view('ajax/json_response', $data);
}
于 2012-08-25T22:28:17.307 に答える
0

理由はわかりませんが、次のコードで間違いを犯しています。

$.each(data.name, function (a, b) {
    $("#suggestion_tab").append('<li>' + data.b + '</li>');
});

$.each メソッドで "data.b" を使用することはできません。b は data.name のオブジェクトです。実際には "b" は data.name[a] (data.name[a] == b) と同じです。

したがって、data.b は false です (data.name[a] == b) && data.name[a] != data.b

$.each ループで console.log(b) を使用して、配列オブジェクトを確認します (firefox と firebug の拡張機能が必要です)。

$.each(data.name, function (a, b) {
    console.log(b);
});

それぞれの名前を li 要素に入れたいと思います。true の場合は、次のコードを使用します。

$.each(data, function (a, b) {
    $("#suggestion_tab").append('<li>' + b.name + '</li>');
});

// ここで b.name == data[a].name

于 2012-05-25T14:24:25.780 に答える