2013-12-17 90 views
0

在我的HTML中,當用戶從下拉選項中進行選擇時,所選項目將存儲在Javascript變量中。我試圖在CodeIgniter中將這個值傳遞給我的控制器變量,但是它失敗了。無法將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。執行的代碼是低於其他內部的一個,這意味着審批的變量沒有價值可言:

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

我一直工作在這幾天,但找不到我哪裏錯了。請幫忙。

UPDATE:

我已經證實,push_approverteto()工作正常,因爲populate_approverteto()成功更新顯示在審批者的名單。

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

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

回答

1

我認爲你在函數參數中有錯誤。

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

和更新您的AJAX PARAM:

url: BASE_URL+'create/1' 

看。在這個例子中,在ajax方法中是$ process in php。 如果您嘗試向* BASE_URL +'create/process'* url發送ajax請求,則會出現php錯誤,因爲參數不是請求中的參數類型或參數類型。

小姐:抱歉我的英語。

相關問題