Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax的会话变量似乎为空_Javascript_Php_Jquery_Ajax_Oop - Fatal编程技术网

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">&times;</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">&times;</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()”我没有在我的类文件中显示这是必要的吗?