PHP $ _SESSION无法使用Fancybox AJAX调用

时间:2014-02-06 10:04:20

标签: php jquery ajax jquery-ui

我在这里真的有一场真正的战斗,并且真的希望有人可以提供帮助。我昨晚很晚才尝试谷歌提供的所有解决方案,但仍未取得成功。

我的网站上有一份我希望添加到食谱中的成分列表。

要处理的是:

  1. 点击“添加到食谱”。这将打开包含jquery UI选项卡内容的fancybox iframe,允许用户以克为单位输入度量。

  2. 从这里用户点击“添加”,fancybox内容进行AJAX调用(建立了创建的数据字符串)..

  3. 由AJAX调用的PHP文件只是将传递给int(食物ID和重量)的值转换为并存储在:

    $_SESSION['recipe'][] = array('id' => $id , 'weight' => $weight);

  4. 一旦完成,fancybox将关闭,并且包含食谱卡路里信息的起始页面(第一步)上的div应重新加载并更新。

  5. 除了3之外,所有步骤似乎都有效。

    每当我尝试vardump会话时,它都是空的。

    我在每个页面上开始了会话,即第1步,fancybox页面,然后是ajax,称为页面。

    我完全失去了。

    我在步骤3的AJAX调用是:

        $(document).on('click', '.add-food-button', function () {
        var weight = $("input#grams").val();  
        var id = $("input#ingredientid").val();  
        //var sez = $("input#sez").val();  
    
        var dataString = 'g='+ weight +'&id=' + id ; //+ "&sid=" + sez; 
    
        if (weight > 0)
        {
    
            $.ajax({
              type: "POST",  
              url: "../ajax/add-ingredient-to-recipe.php?"+dataString,  
              dataType: "html",
              data: dataString,  
                success: function (msg) {
    
    
                    frames.top.$.fancybox.close(true);
                    frames.top.$('#calorie-table').load('./views/recipe-calorie-chart.tmp.php');
    
                }
    
            });
    
    
    
        }else{
              $('#grams').addClass('errorInput');
              $('#weight-label').addClass('errorLabel');
        }
    
    });
    

    和调用的PHP文件(步骤4)是:

    <?php
    
    session_start();
    
    include('../includes/config.inc.php');
    
    if (isset($_GET['weight']) && $_GET['id'])
    {   
        $weight = (int) $_GET['weight'];
        $id = (int) $_GET['id'];
        $_SESSION['recipe'][] = array('id' => $id,'weight' => $weight);
    
    
    
    }
    
    ?>
    

    我已经阅读过通过AJAX传递会话ID,因为AJAX调用可能会生成一个新会话,我实际上需要使用已经打开的会话。如果是这种情况我该怎么做?

    任何建议都会很棒!

1 个答案:

答案 0 :(得分:0)

如果你检查ajax电话,那么你会发现你正在传递“g”&amp;查询字符串中的“id”变量。但是在php文件中你正在检查“重量”和&amp;&amp; “ID”。所以这个条件不会成立,会话永远不会设置。所以你得到空白会话值。

更新了ajax电话

$.ajax({
      type: "POST",  
      url: "../ajax/add-ingredient-to-recipe.php?"+dataString,  
      dataType: "html",           
        success: function (msg) {


            frames.top.$.fancybox.close(true);
            frames.top.$('#calorie-table').load('./views/recipe-calorie-chart.tmp.php');

        }

    });

更新了PHP代码

    session_start();

include('../includes/config.inc.php');

if (isset($_GET['g']) && $_GET['id'])
{   
    $weight = (int) $_GET['g'];
    $id = (int) $_GET['id'];
    $_SESSION['recipe'][] = array('id' => $id,'weight' => $weight);



}