2016-11-14 44 views
0

我的PHP代碼如下:不能由JavaScript代碼更改PHP會話變量

public function checkWhetherASalaryProcessIsOngoing(){   
    if(isset($this->session->userdata['salary_is_on_going'])){ 
    echo $this->session->userdata['salary_is_on_going']; }else{echo 'NOTSET';}  
} 

public function set_salary_is_on_going(){   
    if(!isset($this->session->userdata['salary_is_on_going'])){$isset = $this->session->set_userdata('salary_is_on_going','SET');} 
    echo $this->session->userdata['salary_is_on_going'];   
} 

public function delete_set_salary_is_on_going(){   

    $this->session->set_userdata('salary_is_on_going','NOTSET'); 
    echo $this->session->userdata['salary_is_on_going']; 
} 

我的javascript代碼:

$(document).on('click','a#process',function(){ 
// set the start time 
t0 = performance.now(); 
alert('<?php if(isset($this->session->userdata['salary_is_on_going'])){echo $this->session->userdata['salary_is_on_going'];}?>'); 

var payment_period_id = parseInt($('#paymentPeriodId').val()); 
var unit_id = parseInt($('#unitIdz').val()); 
var user_id = parseInt($('#userIdz').val());  

// check whether same session variables exists in all opened pages. function in D:\xampp\htdocs\diganta\assets\js\common_js.php     
checkSessionDataWithPageSessionData(function(dataii){ 
if(dataii === 'NOTCHANGED'){ 

checkWhetherASalaryProcessIsOngoing(function(dataoo){ 
    if(dataoo === 'NOTSET'){ 
    // if not set then set session variable named salary_is_on_going  

    set_salary_is_on_going(function(data55){ 
     if(data55 === 'SET'){ 

     progress(); 

     var checkedRows = []; 
     $("#supervisorList tr").each(function() { 

      if ($(this).find("input").is(":checked")) { 
       checkedRows.push({"supervisor_id" : $(this).find("td:eq(1)").text()}); 
      } 
     }); 
      if(checkedRows.length < 1){    
       delete_set_salary_is_on_going(); 
       custom_alert('Supervisor not selected.',"Error",10,'right',50); 
       }  
      if(checkedRows.length > 0){ 
       ensureItIsNotARevisedSalary(checkedRows,user_id,unit_id,payment_period_id); 
      }else{return;} 



     }else{custom_alert('Can not set salary ongoing session variable.',"Error",10,'right',50);return;}    
    });   

    }else{custom_alert('A salary process is ongoing.',"Error",10,'right',50);return;} 
}); 

}else{custom_alert('session data change detected. Cannot Execute.<br><br> refresh.',"Error",10,'right',50);return;} 
    });   
}); 


function  ensureItIsNotARevisedSalary(checkedRows,user_id,unit_id,payment_period_id){ 

var url = '<?php echo base_url();?>primary_salary_processing/ensureItIsNotARevisedSalary'; 
$.post(url,{payment_period_id:payment_period_id}).done(function(data){ 
data = parseInt(data); 
if(data > 0){   
      setTimeout(function(data){delete_set_salary_is_on_going();},1000); 
      custom_alert('This is a revised salary it can not be processed from here.',"Error",120,'right',50);   
     }   
    else{checkWhetherSalaryIsLocked(checkedRows,user_id,unit_id,payment_period_id);}  
}); 
} 

function checkWhetherASalaryProcessIsOngoing(result){ 

var url = '<?php echo base_url();?>primary_salary_processing/checkWhetherASalaryProcessIsOngoing'; 
$.ajax({ 
    url:url, 
    data:{}, 
    type:"POST", 
    success:function(data){ 
     result(data); 
    },   
}); 
} 
function set_salary_is_on_going(result){ 

var url = '<?php echo base_url();?>primary_salary_processing/set_salary_is_on_going'; 
$.ajax({ 
    url:url, 
    data:{}, 
    type:"POST", 
    success:function(data){ 
     result(data); 
    },   
}); 
} 

function delete_set_salary_is_on_going(){ 

var url = '<?php echo base_url();?>primary_salary_processing/delete_set_salary_is_on_going'; 
$.ajax({ 
    url:url, 
    data:{'url2':'<?php echo $this->session->userdata['url'];?>'}, 
    type:"POST", 
    success:function(data){ 

    },   
    }); 
} 

點擊#過程工資過程開始之後。

問題是javascript函數delete_set_salary_is_on_going()不能改變「salary_is_on_going」到「NOTSET」具有指數

會話變量

+0

你說在http://stackoverflow.com/questions/13840429/what-is-the-difference-between-client-side-and-server-side-programming後比:要調用一些PHP代碼,客戶端將不得不向服務器發送一個新的HTTP請求。這可以通過三種可能的方法之一來實現: 鏈接,它使瀏覽器加載新頁面。 表單提交,它將數據提交給服務器並加載新頁面。 一個AJAX請求,它是一種向服務器發出常規HTTP請求的Javascript技術(如1.和2.將會),但不會離開當前頁面。在這裏我使用的是ajax。我錯了嗎。 –

回答

-1

你忘了寫在session_start()在接收/處理網址是什麼?

<?php session_start() ?> 
+0

這應該是一個評論而不是答案。 – secelite