1

CakePhp 2.x でテキストボックスの Ajax オートコンプリート設定を取得しようとしています。

私の見解では:

<?php $this->start('script'); ?>
<script type="text/javascript">
    $(document).ready(function () {
        var options, a;
        jQuery(function() {
            options = { 
                serviceUrl: "<?php echo $this->Html->Url(array('Controller' => 'Logs', 'action' => 'autoComplete')); ?>",
                minChars: 2,
            };
            a = $('#LogTimeSpent').autocomplete(options);
        });
    });
    $('#saveCust').click(function () {
        alert("Test")
    });
</script>
<?php $this->end(); ?>

私のコントローラーには次のものがあります:

function autoComplete($query) {
    if ($this->request->is('ajax'))
    {
        $suggestions = $this->Customer->find('all', array(
            'conditions' => array(
                'Customer.fullName LIKE' => '%'.$query.'%'
                )
            ));
        return json_encode(array('query' => $query, 'suggestions' => $suggestions));

    }
}

クエリに影響する場合、Customer.fullName は仮想フィールドです。現在、Firebug によって 500 内部サーバー エラーが発生しています。

4

1 に答える 1

3

仮想フィールドが機能するには、何か特別なことをしなければならないことがわかりました。仮想フィールドは行くべき道ではないと判断したので、それを更新しました。queryパラメータとしての $も正しくないため、$this->params['url']['query'];代わりにクエリ文字列を取得する必要がありました。最後に、返すのではなく、json_encodeを使用する必要がありました_serialize。これが私の更新されたコントローラーです。これが誰かの助けになることを願っています。私の見解は元の投稿で正しいです。

function autoComplete() {
    if ($this->request->is('ajax'))
    {
        $query = $this->params['url']['query'];
        $this->set('query', $query);

        $customer = $this->Log->Customer->find('all', array(
            'conditions' => array(
                'OR' => array(
                    'Customer.first_name LIKE' => '%'.$query.'%',
                    'Customer.last_name LIKE' => '%'.$query .'%'
                )),
            'fields' => array(
                'Customer.first_name', 'Customer.last_name'
                )
            ));

        $names = array();
        $id = array();
        foreach ($customer as $cust) {
            $fullName = $cust['Customer']['last_name'] . ', ' . $cust['Customer']['first_name'];
            array_push($names, $fullName);
            array_push($id, $cust['Customer']['id']);
        }
        $this->set('suggestions', $names);
        $this->set('data', $id);
        $this->set('_serialize', array('query', 'suggestions', 'data'));        
    }
}
于 2013-03-28T20:47:42.863 に答える