来自jquery重定向的POST变量但未设置

我最近问了一个关于将jquery的POST变量发送到另一个php页面,重定向到该页面,对发送的信息执行某些操作以及重定向原始页面的问题。

jQuery post方法和目录混淆

我在几乎完全相同的代码上寻求帮助,因为评论它的人只回答了我的一半问题,并将其标记为重复。 虽然它确实有所帮助,但它并没有解决问题。

我根据先前尝试解决此问题的建议进行了编辑。 正如您将看到的,点击此示例中的保存按钮将带您到changePage.inc.php,第一个重定向,但第二个重定向不会发生,这应该会带您到secondPage.php。

文件名为index.php

      $(document).ready(function(){ $('#saveForm').submit(function(event){ event.preventDefault(); var message = ""; var changeText = function(){ message = "You wrote: " + $('#text').val(); }; var send = function(){ if(message !== ""){ $.post("includes/changePage.inc.php", {message: message}); window.location.href = "includes/changePage.inc.php"; } }; changeText(); send(); }); });    

名为changePage.inc.php的文件(在名为includes的文件夹中)

 <?php session_start(); if(isset($_POST['message'])){ header("Location: ../secondPage.php"); } exit(); 

文件名为secondPage.php

  

jQuery $.post()方法就是所谓的asynchronous调用。 这意味着当$.post()尝试执行时,它之后的任何代码行都会尝试执行。

请注意,您在$.post()之后立即重定向。 这意味着当$.post()尝试运行时,您将重定向到includes/changePage.inc.php ,这可能会阻止PHP重定向到../secondPage.php运行。 这就是我们所说的race condition ,其中两个事件同时运行,其中一个事件可以在另一个事件之前完成而无法保持事件同步。

从我所知道的,你真正想要做的是将数据处理交给PHP,然后在完成后,你想要重定向到给定的页面。

如果我对此是正确的,那么删除window.location.href = "includes/changePage.inc.php"; 因为否则你总是会遇到这种竞争条件的问题。 处理PHP中的重定向 – 它应该自己工作。 如果您在使用PHP直接重定向时遇到问题,那么您可以通过jQuery重定向:

你的jQuery POST

 $.post("includes/changePage.inc.php", {message: message}, function(data) { var obj = $.parseJSON(data); window.location.href = obj.redirect_url; }); 

什么通过PHP返回

 echo json_encode(array('redirect_url'=>'includes/secondPage.php')); 

如果这不符合您的需求,那么您需要真正坐下来更好地解释您的用例和意图。 如果你不能很好地解释它以准确地传达你想要的东西,那么你可能没有完全掌握你需要解决的问题。

Interesting Posts