我一直在这个问题上工作了几天,没有运气。我试图在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。
哎呀,发现了这个问题!问题是我的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
请帮我在$ this-> Js-> request的数据参数中传递多个值。我想发布两个选择框值到ajax请求来填充第三个选择框。请帮助 – 2012-08-09 06:21:51