无法将数组值从Javascript传递到Codeigniter控制器

无法将数组值从Javascript传递到Codeigniter控制器,javascript,php,ajax,codeigniter,parameters,Javascript,Php,Ajax,Codeigniter,Parameters,在my HTML中,当用户从下拉选项中选择时,所选项目存储在Javascript变量中。我试图将此值传递给CodeIgniter中的控制器变量,但失败了 这是我的HTML代码: <form name="change_app_formTrader" id="change_app_formTrader"> <label>Approver Name</label> <select name="app_id[]"> <

在my HTML中,当用户从下拉选项中选择时,所选项目存储在Javascript变量中。我试图将此值传递给CodeIgniter中的控制器变量,但失败了

这是我的HTML代码:

<form name="change_app_formTrader" id="change_app_formTrader">
    <label>Approver Name</label>
    <select name="app_id[]">
        <option value="0">select approver</option>
        <option value="approver1">Approver One</option>
        <option value="approver2">Approver Two</option>
        <option value="approver3">Approver Three</option>
        }
        ?>
    </select>
</form>
<input type="button" onclick="save_appchangeteto()" value="Save Changes"/>
var tetoApprover;
var appword;

function save_appchangeteto(){
    tetoApprover = [];
    appword = '';
    var appid   = 0;

    $('form[name="change_app_formTrader"]').find(':input').each(function(){
        appid = $(this).val();
        appword = this.options[this.selectedIndex].text;
        push_approverteto(appid,appword);
    });
    populate_approverteto();

} /*save_appchangeteto()*/

function push_approverteto(appid,appword){
    tetoApprover.push({
        'appid':appid,
        'appword':appword
    });
}

function populate_approverteto(){
    var htm = '';
    var x = 0;
    $.each(tetoApprover,function(){
        x+=1;
        htm += '<tr>';
            htm += '<td>'+x+'</td>';
            htm += '<td>'+this.appword+'</td>';
            htm +='<td></td>';
            htm +='<td></td>';
            htm += '</tr>';
    });
    $('#approverTblTrader').html(htm);
} /*populate_approverteto*/
$('#submitTradersRequest').click(function(){
    $('.rc-loader').html('<img src="'+BASE_URL+'assets/img/ajax-loader.gif"/>&nbsp;Please wait..');
    $(this).prop('disabled',true);

    tetoApprover = (tetoApprover.length<1)?1:tetoApprover;
    $.ajax({
        url: BASE_URL+'create/process',
        type: "POST",
        data: {approvers:tetoApprover},

        success: function(data){
            var response = $.parseJSON(data);
            if(response.status!='Success'){
                $('.rc-loader').html('<span class="alert alert-error">'+response.msg+'</span>');
            }
        }
    }).fail(function() { alert('Error'); });

    $(this).prop('disabled',false);
});
$post = $this->input->post();
if($post['approvers']){
    foreach($post['approvers'] as $val){
        $count++;
        $status = 0;
        $token = sha1(rand().date('m/d/y'));
        if($count==1){
            $status = 1;
        }
        $params = array('scalar'=>array(
            $reqid,
            $val['appid']
        )
        );
        $this->create_model->updatestatus($params);
    }
}
else { //this is where the process currently goes
    $val['appid'] = 4; //test
    $params = array('scalar'=>array(
        $reqid,
        $val['appid']
    ));
    $this->create_model->updatestatus($params);
}
这件事我已经做了好几天了,但找不到哪里出了问题。请帮忙

更新:

<form name="change_app_formTrader" id="change_app_formTrader">
    <label>Approver Name</label>
    <select name="app_id[]">
        <option value="0">select approver</option>
        <option value="approver1">Approver One</option>
        <option value="approver2">Approver Two</option>
        <option value="approver3">Approver Three</option>
        }
        ?>
    </select>
</form>
<input type="button" onclick="save_appchangeteto()" value="Save Changes"/>
var tetoApprover;
var appword;

function save_appchangeteto(){
    tetoApprover = [];
    appword = '';
    var appid   = 0;

    $('form[name="change_app_formTrader"]').find(':input').each(function(){
        appid = $(this).val();
        appword = this.options[this.selectedIndex].text;
        push_approverteto(appid,appword);
    });
    populate_approverteto();

} /*save_appchangeteto()*/

function push_approverteto(appid,appword){
    tetoApprover.push({
        'appid':appid,
        'appword':appword
    });
}

function populate_approverteto(){
    var htm = '';
    var x = 0;
    $.each(tetoApprover,function(){
        x+=1;
        htm += '<tr>';
            htm += '<td>'+x+'</td>';
            htm += '<td>'+this.appword+'</td>';
            htm +='<td></td>';
            htm +='<td></td>';
            htm += '</tr>';
    });
    $('#approverTblTrader').html(htm);
} /*populate_approverteto*/
$('#submitTradersRequest').click(function(){
    $('.rc-loader').html('<img src="'+BASE_URL+'assets/img/ajax-loader.gif"/>&nbsp;Please wait..');
    $(this).prop('disabled',true);

    tetoApprover = (tetoApprover.length<1)?1:tetoApprover;
    $.ajax({
        url: BASE_URL+'create/process',
        type: "POST",
        data: {approvers:tetoApprover},

        success: function(data){
            var response = $.parseJSON(data);
            if(response.status!='Success'){
                $('.rc-loader').html('<span class="alert alert-error">'+response.msg+'</span>');
            }
        }
    }).fail(function() { alert('Error'); });

    $(this).prop('disabled',false);
});
$post = $this->input->post();
if($post['approvers']){
    foreach($post['approvers'] as $val){
        $count++;
        $status = 0;
        $token = sha1(rand().date('m/d/y'));
        if($count==1){
            $status = 1;
        }
        $params = array('scalar'=>array(
            $reqid,
            $val['appid']
        )
        );
        $this->create_model->updatestatus($params);
    }
}
else { //this is where the process currently goes
    $val['appid'] = 4; //test
    $params = array('scalar'=>array(
        $reqid,
        $val['appid']
    ));
    $this->create_model->updatestatus($params);
}
我已确认
push\u approverteto()
工作正常,因为
populate\u approverteto()
正在成功更新显示屏上的审批人列表

换句话说,值成功保存在变量
tetoApprover


但是,它无法传递给控制器变量
$post['approvers']
。这是我的主要问题,因为我无法将用户给定的值保存到数据库中。

我认为您在函数param中有错误

public function create($process='0')
{
     if($proces='0' or !isset($proces)) return false;
     //do something
}
并更新您的ajax参数:

url: BASE_URL+'create/1'
看。在本例中,ajax中的1方法是php中的$process。 如果您试图将ajax请求发送到*BASE_URL+'create/process'*URL,则会出现php错误,因为请求中的param not isset或type of param not type of param

附言:对不起我的英语