Javascript函数和PHP会话变量

Javascript函数和PHP会话变量,php,javascript,Php,Javascript,我在PHP页面内的Body标记中有以下脚本: <script type="text/javascript"> function goNext() { <?php if(isset($_SESSION['current'])) { ?> window.location="step2.php"; <?php } else { ?> alert('P

我在PHP页面内的Body标记中有以下脚本:

<script type="text/javascript">
function goNext()
{
    <?php
       if(isset($_SESSION['current']))
       {
    ?>
    window.location="step2.php";
    <?php
      }
       else
      {
    ?>
      alert('Please select one item to continue.');
    <?php
      }
    ?>
}
</script>

函数goNext()
{
window.location=“step2.php”;
警报('请选择一项继续');
}
我正在用PHP设置会话vaible。 因此,当我单击页面上的链接时,会话被设置。 之后,当我调用这个函数时,它仍然会进入警报状态

如果我刷新页面,那么它将跳过警报并转发到函数中提到的URL

你知道为什么我没有刷新页面,但它没有进入URL吗


更新


我已经在页面的开头设置了Session_start。 会话设置正确,因为当我刷新时,我可以看到它正在工作。 第三,我已经在使用AJAX设置会话,而不进行页面刷新。 屏幕上还有其他元素响应会话更改,它们正在工作。
这是唯一一个“issset”函数没有检测到会话的函数。

因为服务器端和客户端之间存在差异。在服务器上执行PHP脚本后,Javascript在浏览器中执行


我不知道您想做什么,但AJAX可能是答案。

您需要使用AJAX调用来设置和存储会话值。然后,您可以使用header('Location:step2.PHP')在PHP代码中重定向。

不要忘记顶部的session_start()(或者确保您有session auto start)

AJAX不是这样工作的。您必须将PHP和Javascript分开。使用PHP从服务器写入页面。javascript将向服务器发出AJAX调用,您将在服务器上用PHP应答这些调用。您将需要一个教程来了解如何发出AJAX请求,这将取决于您使用的是普通的旧javascript还是库,如jQuery或Mootools

编辑:我不确定你到底想做什么,但我将试着把我认为你想做的事情付诸实践。(注意:我从未使用过jQuery,所以这是一个很大的猜测,只是伪代码——希望这个想法有用)


函数goNext()
{
//从服务器获取会话(通过AJAX调用)。
$.get(“getSession.php”,函数(sessionFromServer)
{
//根据sessionFromServer的值执行操作
//然而,php并没有这样做似乎很奇怪
//标题(“位置:step2.php”);
window.location=“step2.php”;
});
}
getSession.php-类似于以下内容:

<?php
session_start();
echo json_encode($_SESSION);
?>


这让你明白我所说的分离它们的意思。

为什么不用一个标题来简化它呢

<? 
if(isset($_SESSION['current'])) {header("location: step2.php"); exit;}
?>


php是在服务器上运行的,因此在设置会话之前需要重新加载页面。正在使用AJAX设置会话。因此,无需重新加载设置会话的页面。您应该添加这些详细信息,然后我已经在使用jQueryAjax解决方案来设置会话变量。他们正在进行适当的设置。唯一的问题是,当我在会话设置后调用相同的javascript时,它仍然不会进入正确的循环,您仍然无法理解它。您正在使用的
$\u会话['current']
只编写一次。Javascript没有更新。之后,即使您更新了会话变量,您得到的JS仍然包含旧值,因为$\u会话部分不再由PHP解释器计算。它已经经历了这个阶段,现在静态地驻留在浏览器中。哦,那么,一旦设置好会话,我如何检索会话呢?我需要进行另一个AJAX调用来检索它吗?您可以在javascript中创建一个变量,最初使用
myVar=,如果您想重新计算它,可以将其设置为
myVar=doAjaxCall('GetCurrentSession')
左右:会议开始了。正如我提到的,会话设置正确,jQueryAjax调用正在工作。我不知道你说的“这不是它的工作原理”是什么意思。因为会话是通过Ajax调用进行设置的。我在代码中没有看到任何jQuery Ajax调用。当您有一段javascript代码时,它不能包含PHP代码(您的代码片段混合了这些代码,因此是错误的)。他们不混在一起。混合它们的唯一方法是向服务器发出请求(通过AJAX请求),然后服务器可以运行PHP代码。我有一个单独的功能,可以进行会话设置。此特定功能由另一个按钮使用,按下此按钮时,应检查会话是否已设置,并应相应执行操作。我设置会话的方式可以在这里找到:如果您还想查看setSession.PHP的PHP代码,请告诉我。@ssdesign:Paul是对的,您让您的生活变得比需要的更复杂。很明显,你已经很难理解到底发生了什么,而根本不知道不同层之间到底是如何相互作用的。将事物分开以获得更多的知识和力量。在这种情况下,如何执行“else”语句--编辑--好的,我想我可以试试…@ssdesign:你不需要。
<? 
if(isset($_SESSION['current'])) {header("location: step2.php"); exit;}
?>