我在这里真的有一场真正的战斗,并且真的希望有人可以提供帮助。我昨晚很晚才尝试谷歌提供的所有解决方案,但仍未取得成功。
我的网站上有一份我希望添加到食谱中的成分列表。
要处理的是:
点击“添加到食谱”。这将打开包含jquery UI选项卡内容的fancybox iframe,允许用户以克为单位输入度量。
从这里用户点击“添加”,fancybox内容进行AJAX调用(建立了创建的数据字符串)..
由AJAX调用的PHP文件只是将传递给int(食物ID和重量)的值转换为并存储在:
$_SESSION['recipe'][] = array('id' => $id , 'weight' => $weight);
一旦完成,fancybox将关闭,并且包含食谱卡路里信息的起始页面(第一步)上的div应重新加载并更新。
除了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调用可能会生成一个新会话,我实际上需要使用已经打开的会话。如果是这种情况我该怎么做?
任何建议都会很棒!
答案 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);
}