带有ajax的会话变量似乎是空的

时间:2014-05-13 09:06:09

标签: 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 * $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处理文件中访问它时,它说:

Warning: Invalid argument supplied for 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>');
                    }
                }
            });
    }); 

如果有的话 ob_start(); tag和session_start();标签

当我尝试print_r时,只有以某种方式链接到我的班级的会话返回1,其余的会话仍然存在

我的代码第一部分中的$ _SESSION [&#39;项目&#39;]的foreach是不行的 代码的所有其他部分都工作

修改

一夜好眠似乎解决了冲突...... 不知道错误是什么,也不知道我是如何修复错误但它有效! 感谢您的建议:)

3 个答案:

答案 0 :(得分:2)

如果/inc/afrekenen.php与您的班级在同一个域中,则会话共享 和phpsid cookie一起传递你的ajax请求。   在这种情况下,唯一的问题是你的会话没有在/inc/afrekenen.php中启动。

验证会话是在/inc/afrekenen.php中启动的。

答案 1 :(得分:0)

// 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 ...
}

答案 2 :(得分:0)

我注意到我的会话保存在

session_save_path('../tmp');

将此添加到我的ajax文件的顶部,它起到了神奇的作用

感谢您的建议