![](/img/trans.png)
[英]CodeIgniter: Pass Javascript Array from View to Controller then store to Database
[英]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"/> 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.