Недавно я задал вопрос о отправке переменной 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'));
Если это не соответствует вашим потребностям, вам нужно будет сесть и лучше объяснить ваш прецедент и ваши намерения. Если вы не можете объяснить это достаточно хорошо, чтобы сообщить, что именно вы хотите, тогда вы, вероятно, не имеете полного понимания проблемы, которую вам нужно решить.