2016-10-30 11 views
1

の下で失敗します。jqueryのオートコンプリートは、私は次のjQueryスニペットでページを持っているCakePHP3.x

$("#fuser").autocomplete({ 
    source: "https://stackoverflow.com/users/jsonusers", 

select: function(event, ui) { 
    $("#find").val(ui.item.value); 
    return false; 
}, 
focus: function(event, ui) { 
    $("#find").val(ui.item.label); 
    return false; 
} 

「ソースURL」のコードは次のようになります。

$connection = ConnectionManager::get('default'); 
    $results = $connection->execute($query, ['str' => $find])->fetchAll('assoc'); 

    $users = []; 
    foreach($results as $user){ 
     $users[] = ['value'=>$user['user_id'], 'label'=>$user['full_name']]; 
    } 

    $this->set(compact('users'));   
// $this->set('_serialize', 'users'); // this is the correction that works 
    $this->set('_serialize', ['users']); // this is Bake's default 

ときIオートコンプリートウィジェットを使用しようとすると、完全に失敗します。

私のコンソールを見ると、私は理由を知っていると思います。ケーキは、引用符の中に(「名前」と「値」)私の「キー」を入れているように見えますので、JSONは次のようになります。

代わりに、このようなの
[ 
     { 
      "value": "46", 
      "label": "Test User" 
     } 
] 

[ 
    { 
     value:"46", 
     label:"Test User" 
    } 
] 

だから私は」と思ったのですが、「手作業で自分で手作りのオブジェクトを作成するだけです。簡単に配列を整理し、jsonを必要に応じてフォーマットするのは簡単ですか?

いいえ、私は間違っています。 CakePHPでは、ajax経由でデータがどのように送信されるかを私が決めることはできません。私はケーキの書式設定に立ち往生しています。私自身のjsonオブジェクトを作成しようとすると、エンコーディングで乱雑になり、STILLはサブオブジェクトとして埋もれてしまいます。

私は間違っていますか?それともケーキのバグですか?もしそうなら、いくつかの回避策がありますか? jQueryオートコンプリートをCakeが返すjsonオブジェクトと連携させることはできますか?私はjsでさらに解析する必要がありますか?悲しいことに、もしそうなら、それはjQueryの使用に関する私の知識を超えています。

ご迷惑をおかけして申し訳ありません。

答えて

0

あなたは本当にこのような配列が必要な場合:

[ 
    { 
    value:"46", 
    label:"Test User" 
    } 
] 

その後、あなたは、単に行うことができます。

$this->set('_serialize', 'users'); 

の代わりに:

$this->set('_serialize', ['users']); 

手段は単なる文字列ではない配列をシリアライズ。

+0

これは残念なことに誤植でした。私はそれをキャッチして助けてくれてありがとうと思いますが、それは私の問題の原因ではありません。コードを修正して投稿します。生成されたJSONは、手動で作成してJS varとしてページに埋め込んでもjQueryで解析されません(サーバー上で動的なフルテキストクエリが必要なのでできません。データの多く) – calzone

+0

あなたのソースをこのようにするなら/users/jsonusers.json ?? –

+0

「.json」を含むURLであなたのソースをヒットした場合、探しているのと同じ配列が得られます。 –

関連する問題