簡體   English   中英

無法將數組值從Javascript傳遞到Codeigniter控制器

[英]Could not pass array value from Javascript to Codeigniter controller

在我的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"/>

這是我的save_appchangeteto()的javascript代碼:

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);
});

但是在我的控制器中, tetoApprover沒有通過tetoApprover 執行的代碼是下面else中的代碼,這意味着批准者的變量根本沒有值:

$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_approverteto()正常運行,因為populate_approverteto()成功更新了顯示屏上的批准者列表。

換句話說,這些值已成功保存在變量tetoApprover

但是,它無法傳遞給控制器​​變量$post['approvers'] 那是我的主要問題,因為我無法將用戶提供的值保存到數據庫中。

我認為您在函數參數方面有錯誤。

public function create($process='0')
{
     if($proces='0' or !isset($proces)) return false;
     //do something
}

並更新您的ajax參數:

url: BASE_URL+'create/1'

看。 在AJAX方法本實施例1是在PHP $過程 如果您嘗試將ajax請求發送到* BASE_URL +'create / process'* url,則將發生php錯誤,因為沒有設置param或請求中的param類型。

PS:對不起,我的英文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM