0
public function getCrew(){
    $search = $this->input->post('name');
    if($this->input->post('ajax') && (!empty($search))){
         $result = $this->model->getNames($search);
         foreach($result as $r){
            echo json_encode($r);
         }
    }
}

$(document).ready(function(){
$('#getMem').keyup(function(e){

    var name = {
        ajax: 1,
        name: $('#getMem').val()
    }

    $.ajax({
        url: 'work/getCrew',
        type: 'POST',
        data: name,
        dataType: 'json',
        success: function(data){
            $('#freshMem').html(data.first_name);
        },
        error: function(){
            alert('Error.');
        }
    });
});

 });

データベースからの結果が1行しか返されない場合、これは正常に機能します。複数の行がエラーを生成する場合、誰でもこれを解決する方法を教えてください

4

2 に答える 2

2

Output クラスを使用して、JSON が返されることをブラウザーに伝えます。問題はjson_encode、foreach ループで複数のオブジェクトを処理していることです。モデルから返さjson_encodeれた配列のみ

    public function getCrew(){

        $search = $this->input->post('name');
        if($this->input->post('ajax') && (!empty($search))){
             $result = $this->model->getNames($search);

             $this->output
                         ->set_content_type('application/json')
                         ->set_output(json_encode(array("response" => $result)));
        }
    }
    $(document).ready(function(){
        $('#getMem').keyup(function(e){
        var name = {
            ajax: 1,
            name: $('#getMem').val()
        }

            $.ajax({
                url: 'work/getCrew',
                type: 'POST',
                data: name,
                dataType: 'json',
                success: function(data)
                {
                    var __html = '';

                    $.each(data.response, function (a, b) 
                    {

                        __html += '<p>'+b.first_name+'</p>';

                    });

                    $('#freshMem').html(__html);
                },
                error: function()
                {
                    alert('Error.');
                }
            });
        });
    });
于 2012-11-26T06:16:24.337 に答える
0

これを試して:

$.ajax({
        url: 'work/getCrew',
        type: 'POST',
        data: name,
        dataType: 'json',
        success: function(data){
             json_data = $.parseJSON(data);
                         $.each(json_data, function(i,item){
                           $('#freshMem').append(item.first_name);
            });
        },
        error: function(){
            alert('Error.');
        }
    });

返された配列を反復処理する必要があります。

また、コントローラーのコードを変更する必要があります。

public function getCrew(){
    $search = $this->input->post('name');
    if($this->input->post('ajax') && (!empty($search))){
         $result = $this->model->getNames($search);
         // assuming that $result is array...
         $json = json_encode($result);
         echo $json;
         /*foreach($result as $r){
            echo json_encode($r);
         }*/
    }
}
于 2012-11-26T06:05:19.537 に答える