1

我是 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 脚本为每个下拉列表设置一个更改监听器并在我的控制器中调用一个操作:

$(".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
}

谢谢!!!

4

1 回答 1

2

您正在发布到/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->datainsidechangeState()来访问数据。

我猜你有另一个功能,jobs()这就是为什么 AJAX 工作正常并且alert正在生成。

于 2013-11-08T18:45:23.420 回答