0

jqueryUIオートコンプリートに変換する入力フィールドがあります。

$( "#autocomplete" ).autocomplete({
    autoFocus: true,
    source: mylist
 });

mylist変数は、['Value1','Value2,'Blah']元々スクリプトにハードコーディングした配列形式の文字列です。

ここで、mylist変数を、cakephpアプリの関数へのajax呼び出しの結果にする必要があります。関数は基本的に次のとおりです。すべてのデータをリストとして取得し、jsonがそれをエンコードします。

public function source() {
    $this->layout = 'ajax';
    $countries=$this->Country->find('list',array('fields'=>'Country.country'));
    ChromePhp::log($countries);
    echo json_encode($countries);
}

これは以下を出力します:

{"1":"Afghanistan","2":"Albania ","3":"Algeria ","5.. 

私の問題は、この関数の出力(最終的には「data」としてajax成功コールバックになります)を正しい形式に変換して、オートコンプリートのオプション配列に配置することです。

各値をコンソールログに記録することはできますが、困惑しています。基本的に正しい構文でストローをつかみます。

$.ajax({
    type: "GET",
    dataType: "json",
    url: "/source/",
    success: function(data){
        /*
        magic array string creation code would go here instead of my code below...
        */
        $.each(data, function(i, item) {
            console.log(item);
        });
        console.log('data',data);


    }
})
4

1 に答える 1

2

オートコンプリートプラグインは、適切な形式で提供すれば、多くの作業を実行できます。

$countriesまず、変数のインデックスを0から開始するように再インデックス付けします。そのために、次のarray_values()関数を使用できます。

echo json_encode(array_values($countries));

これにより、次の形式のJSONが提供されます。

['Afghanistan','Albania','Algeria',...]

次に、オートコンプリートコードのソースプロパティをソースアクションのURLに変更できます。

$( "#autocomplete" ).autocomplete({
    autoFocus: true,
    source: "/your_controller/source"
});

オートコンプリートプラグインは結果をフィルタリングしません。代わりに、クエリ文字列がtermフィールド(/ your_controller / source?term = fooなど)とともにURLに追加されるため、find()これを使用するようにメソッドを変更する必要があります。

$countries = $this->Country->find('list', array(
    'fields' => 'Country.country',
    'conditions' => array(
        'Country.country LIKE' => $this->request->query['term'] . '%'
    )
));

sourceオプションが受け入れることができるさまざまなタイプの詳細については、 APIドキュメントのオートコンプリートをご覧ください。

于 2012-11-06T16:48:47.040 に答える