我是cake和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监听器,并在我的控制器中调用一个操作:
$(".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
}

谢谢您!!!

最佳答案

您要发布到/projectManager/jobs,它对应于ProjectManagerController::jobs()
函数声明为public function changeState($id = null, $status = null)。假设changeState(..)ProjectManagerController内的函数,则对应于/projectManager/changeState/$id/$status
您需要切换AJAX发布到的URL。你可以这样做:
url:'http://localhost/projectManager/changeState/'+jobNo+'/'+value',删除data {}并保持您的功能不变,或者您可以
url:'http://localhost/projectManager/changeState',保留data {},将函数更改为changeState(),然后在$this->request->data内使用changeState()访问数据。
我猜您还有另一个函数jobs(),这就是AJAX正常工作和生成alert的原因。

10-06 15:56