我已经在这个问题上工作了几天而没有运气。我正在尝试在CakePHP 2.0中实现一个简单的ajax调用,该调用将根据另一个选择列表的选择填充选择列表。在我的数据库中,我有车辆制造和车辆模型。模型有一个make_id字段。当用户选择品牌时,我希望模型选择列表仅填充具有先前选择的make_id的模型。当我在Firebug中查看请求时,无论make_id如何,它都会发回所有模型。我发现这个小教程试图解释如何根据另一个选择填充选择,但我仍然没有运气。 http://bakery.cakephp.org/articles/Calderoy/2011/01/18/how_to_create_an_observefield_equivalent_in_the_new_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))
)
)
);
这是我的控制器方法:
public function get_model() {
$models = $this->CarModel->find(
'all',
array('conditions',
array('CarModel.make_id' => $this->data['Car']['make_id'])
)
);
$this->set('car_models', $models);
}
最后,这是我的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;});});
//]] GT;
我在我的控制器中包含了RequestHandler助手。值得注意的是,我收到了来自ajax电话的回复。选择make之后,模型中的第一个选项从空白选项变为 - Select - 选项,该选项来自get_model视图文件,但它仍然列出数据库中的每个模型,而不仅仅是列出的模型。正确的make_id。
答案 0 :(得分:1)
根据OP的评论,问题只是语法问题 - 逗号:
array('conditions', array('CarModel.make_id
应为=>
:
array('conditions' => array('CarModel.make_id