Javascript 使用ajax的会话变量似乎为空
我有一段代码给我带来了麻烦。Javascript 使用ajax的会话变量似乎为空,javascript,php,jquery,ajax,oop,Javascript,Php,Jquery,Ajax,Oop,我有一段代码给我带来了麻烦。 我试图从php类函数中获取订单值: public function generalSettings(){ $totalprijs = 0; foreach($_SESSION['items'] as $key => $value){ $products->setProduct($key); $totalprijs = $totalprijs + ($products->prijs_exBTW *
我试图从php类函数中获取订单值:
public function generalSettings(){
$totalprijs = 0;
foreach($_SESSION['items'] as $key => $value){
$products->setProduct($key);
$totalprijs = $totalprijs + ($products->prijs_exBTW * $value);
}
$inclbtw = ($totalprijs * ('1.'.$this->BTWPercnt));
if($totalprijs > $this->franco_vanaf){
$verzendkosten = 0;
}else{
$verzendkosten = $this->verzendkosten;
}
$btw = ($totalprijs + $verzendkosten) * ('0.'.$this->BTWPercnt);
if($totalprijs > $this->franco_vanaf){
$totaalInc = ($totalprijs + $btw);
}else{
$totaalInc = ($totalprijs + $btw + $this->verzendkosten);
}
$return = array(
"subtotaal" => $totalprijs,
"btw" => $btw,
"inclbtw" => $inclbtw,
"verzendkosten" => $verzendkosten,
"totaalInc" => $totaalInc
);
return($return);
}
当我从类中访问此函数时,它会工作。
当我调用在我的签出中使用此函数的其他函数时,它会工作 但当我试图在AJAX处理文件中访问它时,它会说:
警告:为foreach()提供的参数无效。
调用ajax文件中的函数时,代码如下所示:
if($isValid == true){
unset($notneeded);
$notneeded = array("ww1","ww2","huisnr","vhuis","companyvat","companyname","tel","firstname","lastname");
foreach($_POST['gegevens'] as $key => $value){
if(in_array($key,$verplichtArray) && (!in_array($key,$notneeded))){
$fields .= "`".$key."`,";
$values .= "'".$value."',";
}
}
$shoppingcar = new Winkelwagen;
$order = $shoppingcar->generalSettings();
$fields .= '`timestamp`,`klant`,`totaal`,`totaalInc`,`verzendkosten`,`status`,`betaalmethode`';
$values .= "now(),'".$acc->id."','".$order['subtotaal']."','".$order['totaalInc']."','".$order['verzendkosten']."','3','".mysql_real_escape_string($_POST['betaalwijze'])."'";
if(isset($_POST['gegevens']['V'])){
$fields .= ',`V`';
$values .= ",'X'";
}
$message = "INSERT INTO order (".$fields.") VALUES (".$values.")";
}
当我从ajax文件调用函数时,会话似乎是空的
但是,当我从调用ajax文件的文件调用函数时,它工作得很好
谁能解释一下我做错了什么
编辑
我用于根据请求调用ajax文件的jquery片段:
$('#afrekenen').click(function(){
clearInterval(myInterval);
var fields = $('.addressform :input');
$.each(fields, function(field,val){
$(val).removeClass('errorInput');
})
var gegevens = {};
var adresform = $('.addressform').serializeArray();
$.each(adresform, function(index, val){
gegevens[this.name] = this.value;
});
if(!$('input[name=payment]:checked').val()){
var betaalwijze = 0;
}else{
var betaalwijze = $('.betaalwijze').val();
}
var voorwaarden = $('input[name=voorwaarden]:checked').val();
$.ajax({
type: 'post',
url: '/inc/afrekenen.php',
data: {"gegevens":gegevens ,"betaalwijze":betaalwijze,"voorwaarden":voorwaarden},
success: function(data) {
response = jQuery.parseJSON(data)
if(response.isValid == false){
$('#errormsg').html('<div class="alert alert-danger">'+
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'
+response.message+'</div>');
$.each(response.fouteVelden, function(index, object){
$('#'+object+'').addClass('errorInput');
});
}else{
$('#errormsg').html('<div class="alert alert-success">'+
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>'
+response.message+'</div>');
}
}
});
});
$('afrekenen')。单击(函数(){
clearInterval(myInterval);
变量字段=$('.addressform:input');
$.each(字段,函数)(字段,val){
$(val).removeClass('errorInput');
})
var gegevens={};
变量adresform=$('.addressform').serializeArray();
$.each(地址形式、函数(索引、val){
gegevens[this.name]=this.value;
});
如果(!$('input[name=payment]:选中').val()){
var betaalwijze=0;
}否则{
var betaalwijze=$('.betaalwijze').val();
}
var voorwaarden=$('input[name=voorwaarden]:checked').val();
$.ajax({
键入:“post”,
url:“/inc/afrekenen.php”,
数据:{“gegevens”:gegevens,“Betaalwizze”:Betaalwizze,“voorwaarden”:voorwaarden},
成功:功能(数据){
response=jQuery.parseJSON(数据)
if(response.isValid==false){
$('#errormsg').html(''+
“×;”
+响应。消息+“”);
$.each(response.fouteVelden,函数(索引,对象){
$('#'+object+'').addClass('errorInput');
});
}否则{
$('#errormsg').html(''+
“×;”
+响应。消息+“”);
}
}
});
});
如果有
ob_start();标记和会话_start();标签
此外,当我尝试打印时,只有以某种方式链接到我的类的会话返回1,其余会话仍然保留
代码第一部分中通过$\u会话['item']的foreach无效
代码的所有其他部分都可以工作
编辑
晚上睡个好觉似乎解决了冲突。。。
不知道错误是什么,也不知道我是如何修复的,但它是有效的!
感谢您的建议:)如果/inc/afrekenen.php与您的类位于同一个域中,则会话将共享 phpsid cookie将随ajax请求一起传递。 在这种情况下,唯一的问题是会话没有在/inc/afrekenen.php中启动
// print $_POST['gegevens'] if it is returning you a json string so
// do this
$postDataGegevens = json_decode($_POST['gegevens']);
// if $postDataGegevens in current format
// then pass in foreach
foreach($postDataGegevens as $key => $value){
// your code here ...
}
验证会话是否在/inc/afrekenen.php中启动。我注意到我的会话保存在
// print $_POST['gegevens'] if it is returning you a json string so
// do this
$postDataGegevens = json_decode($_POST['gegevens']);
// if $postDataGegevens in current format
// then pass in foreach
foreach($postDataGegevens as $key => $value){
// your code here ...
}
session_save_path('../tmp');
将此添加到我的ajax文件的顶部,效果非常神奇
谢谢你的建议print\r($\u POST['gegevens');似乎是空的,你怎么称呼ajax?domain.com和www.domain.com有什么不同吗?会话已启动。很抱歉,部分代码正在运行。。在我的代码的第一部分中,通过$_会话['item']的foreach无效。您是否在类文件中初始化了您的会话。“session_start()”我没有在我的类文件中显示这是必要的吗?