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