我是蛋糕和mysql的新手,我正在尝试创建一个简单的工作跟踪应用程序。我希望每个作业都有一个下拉框,其中包含“作业可以处于的状态”列表。当用户更改框中的活动项时,我想将其保存到数据库中。
非常感谢任何有关如何处理此问题的帮助。以下是我到目前为止所尝试的内容:
如何使用从数据库表中的枚举中获取的选项在视图中创建表单集:
<?php $id = count($jobs)-1; ?>
<?php for ($job = count($jobs)-1; $job >= 0; --$job): ?>
<tr>
<td>
<?php echo $this->Form->input('status'.(string)$id, array('type'=>'select', 'class' => 'statusSelect','label'=>'', 'options'=>$states, 'default'=>$jobs[$job]['Job']['Status'])); ?>
</td>
我正在使用jquery脚本为每个下拉列表设置一个on change listener,并在我的控制器中调用一个动作:
$(".statusSelect").change(function(){
//Grab job number from the id of select box
var jobNo = parseInt($(this).attr('id').substring(6));
var value = $(this).val();
$.ajax({
type:"POST",
url:'http://localhost/projectManager/jobs',
data:{ 'id': jobNo,
'status':value},
success : function(data) {
alert(jobNo);// this alert works
},
error : function() {
//alert("false");
}
});
});
我在我的控制器中有这个功能:
public function changeState($id = null, $status = null) {
//I don't think the id and status are actually
//being placed as arguments to this function
//from my js script
}
谢谢!!!
答案 0 :(得分:2)
您正在发帖到/projectManager/jobs
,对应ProjectManagerController::jobs()
。
您的函数声明为public function changeState($id = null, $status = null)
。假设changeState(..)
是ProjectManagerController
内的函数,则对应于/projectManager/changeState/$id/$status
。
您需要切换AJAX正在POST的URL。您可以执行以下操作:
url:'http://localhost/projectManager/changeState/'+jobNo+'/'+value'
,移除data {}
并按原样保留您的功能,或者您可以
url:'http://localhost/projectManager/changeState'
,离开data {}
,将您的功能更改为changeState()
,然后在$this->request->data
中使用changeState()
来访问数据。
我猜你有另一个函数jobs()
,这就是为什么AJAX正常工作并且alert
正在生成。