2012-04-17 105 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链接选择

这里是我的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调用中获得响应。在我选择make之后,模型中的第一个选项从空白选项更改为 - 选择 - 选项,该选项来自get_model视图文件,但它仍列出数据库中的每个模型,而不仅仅是具有正确make_id。

+0

哎呀,发现了这个问题!问题是我的get_model方法在控制器上的语法。我改变了我的电话找到从 $模式= $这个 - > CarModel->找到( '所有', 阵列( '条件', 阵列( 'CarModel.make_id'=> $这个 - >数据['汽车'] ['make_id']) ) ); 到 $ models = $ this-> CarModel-> find('all',array( 'conditions'=> array('CarModel.make_id'=> $ this-> data ['Car'] ['make_id ']) ) ); 注意条件的差异。我有一个逗号而不是=>。现在所有人都在工作。 – Stewie 2012-04-17 15:30:36

+0

请帮我在$ this-> Js-> request的数据参数中传递多个值。我想发布两个选择框值到ajax请求来填充第三个选择框。请帮助 – 2012-08-09 06:21:51

回答

1

每由OP的评论,这个问题只是一个语法问题 - 在逗号:

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

应该是=>

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

谢谢,我试图回答我自己的问题,但我还没有足够的秘密来做到这一点。 :) – Stewie 2012-04-26 13:19:44

+0

https://gist.github.com/taleeb35/66abaae65ccd2d01a2c1 – 2014-09-20 03:35:20