2012-04-17 5 views
1

私は数日間この問題に取り組んできました。私はCakePHP 2.0で単純なajax呼び出しを実装しようとしています。これは、別の選択リストの選択に基づいて選択リストを設定します。私のデータベースでは、私は車両メーカーと車両モデルを持っています。モデルにはmake_idフィールドがあります。ユーザーがmakeを選択すると、前に選択したmake_idを持つモデルだけがモデル選択リストに入力されます。 Firebugでリクエストを見ると、make_idに関係なくすべてのモデルが返送されます。私は、この小さなチュートリアルでは、選択に基づいてセレクトする方法を説明しようとしましたが、まだ運がないと分かりました。ここでhttp://bakery.cakephp.org/articles/Calderoy/2011/01/18/how_to_create_an_observefield_equivalent_in_the_new_jshelpercakephp jshelper chained select

は私のビューファイルで見つかった、私のJsHelperコードです:

$this->Js->get('#CarMakeId')->event(
'change', 
$this->Js->request(
    array('controller' => 'CarModels', 'action' => 'get_model'), 
     array(
      'async' => true, 
      'update' => '#CarCarModelId', 
      'dataExpression' => true, 
      'method' => 'post', 
      'data' => $this->Js->serializeForm(array('isForm' => true, 'inline' => true)) 
     ) 
    ) 
); 

そして、ここでは私のコントローラのメソッドです:

​​

は最後に、ここに私のget_modelビューファイルがあります

if($car_models) { 
echo "<option value=''>-- Select --</option>\n"; 
foreach($car_models as $model) { 
echo "<option value=".$model['CarModel']['id'].">".$model['CarModel']['name']."</option>\n"; 
} 

}

これはJsHelperを介して作成されたJavaScriptです:

<script type="text/javascript"> 
//<![CDATA[ 
$(document).ready(function() {$("#CarMakeId").bind("change", function (event)  {$.ajax({async:true, data:$("#CarMakeId").serialize(), dataType:"html", success:function (data, textStatus) {$("#CarCarModelId").html(data);}, type:"post", url:"\/Dropbox\/CartrackerV3\/CarModels\/get_model"}); 
return false;});}); 

//]]>

私は私のコントローラでのRequestHandlerヘルパーが含まれています。私はajax呼び出しからの応答を得ていることに注目する価値があります。メイクを選択した後、モデルの最初のオプションは、空白のオプションからget_modelビューファイルから来る - 選択 - オプションに変わりますが、データベース内のすべてのモデルをリストしています。正しいmake_id。 OPによるコメントパー

+0

おっと、問題を発見しました!この問題はコントローラのget_modelメソッドの構文でした。電話番号を変更しました $ models = $ this-> CarModel-> find( 'all'、 array( 'conditions'、 array( 'CarModel.make_id' => $ this-> data ['Car '] [' make_id ']) ) ); To $ models = $ this-> CarModel-> find( 'all'、array( '条件' =>配列( 'CarModel.make_id' => $ this-> data ['Car'] ['make_id ']) ) ); 条件の違いに注目してください。私は=の代わりにコンマを持っていました。すべては今働いている。 – Stewie

+0

$ this-> Js-> requestのデータパラメータで複数の値を渡す手助けをしてください。私は2番目の選択ボックスの値をajaxリクエストに投稿して、3番目の選択ボックスを設定したいと考えています。助けてください。 –

答えて

1

、問題は単に構文の問題だった - にカンマ:

array('conditions', array('CarModel.make_id 

=>次のようになります。

array('conditions' => array('CarModel.make_id 
+0

ありがとう、私自身の質問に答えようとしましたが、 :) – Stewie

+0

https://gist.github.com/taleeb35/66abaae65ccd2d01a2c1 –