POST-переменная из jquery-перенаправления, но не задана

Недавно я задал вопрос о отправке переменной POST из jquery на другую php-страницу, перенаправление на эту страницу, выполнение некоторых действий с переданной информацией и перенаправление исходной страницы.

Метод jQuery post и путаница каталога

Я прошу о помощи почти по одному и тому же коду, поскольку человек, который прокомментировал это, ответил только на половину моего вопроса и отметил его как дубликат. Хотя это действительно помогло, оно не решило проблему.

Я внес изменения в соответствии с тем, что было предложено в предыдущей попытке решить эту проблему. Как вы увидите, нажатие кнопки сохранения в этом примере приведет вас к changePage.inc.php, первой переадресации, но второго перенаправления не произойдет, что должно привести вас к secondPage.php.

Файл с именем index.php

<?php session_start(); ?> <!DOCTYPE html> <html> <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"> </script> <script> $(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(); }); }); </script> <body> <textArea id="text"></textArea> <form id="saveForm" action="includes/saveEssay.inc.php" method="POST"> <button type="submit" id="saveButton">Save!</button> </form> </body> </html> 

Файл с именем changePage.inc.php (входит в указанную папку)

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

Файл с именем secondPage.php

 <?php echo 'Hello World'; ?> 

Метод jQuery $.post() – это то, что называется asynchronous вызовом. Это означает, что в то время как $.post() пытается выполнить любую строку кода после ее попытки выполнить.

Обратите внимание, что вы перенаправляете сразу же после $.post() . Это означает, что в то время как $.post() пытается запустить, вы перенаправляете на includes/changePage.inc.php , что, вероятно, предотвращает ../secondPage.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')); 

Если это не соответствует вашим потребностям, вам нужно будет сесть и лучше объяснить ваш прецедент и ваши намерения. Если вы не можете объяснить это достаточно хорошо, чтобы сообщить, что именно вы хотите, тогда вы, вероятно, не имеете полного понимания проблемы, которую вам нужно решить.