Оповещение после выполнения сценария php, не покидая текущей страницы

У меня есть страница с двумя кнопками отправки, используя if ($_POST['action'] == 'Test SMS') на выполненный код для моей кнопки "Тест SMS". Мне нужно выполнить код из сценария PHP, а затем дать окно с предупреждением, не покидая страницу.

Я продолжаю читать, что ajax - способ сделать это, и я попробовал, но index.php и updateUserConfig.php находятся на разных серверах, поэтому я получаю междоменные ошибки.

Также кажется, что я не использую header() работает правильно, но текущий код почти делает то, что я хочу. Он выполняет скрипт, не покидая страницу, но я не получаю всплывающее окно с предупреждением.

Я пытался перенаправить с помощью js, но он не будет перенаправлен до тех пор, пока на моей кнопке предупреждения не будет нажата кнопка "ОК", поэтому до тех пор браузер будет перенаправлять на пустую страницу, которая мне не нужна.

Я пытался использовать JS для index.html, но я получаю предупреждение до того, как скрипт будет выполнен, и у меня нет легкого доступа к переменной PHP, чтобы предупредить, на какой номер телефона был отправлен тестовый текст.

index.html

<form action="updateUserConfig.php" method="post">
<input type='submit' name='action' value='Test SMS' class='btn-test'>
<input type="submit" name="action" value="Save" class="btn btn-primary">
</form>

updateUserConfig.php

if ($_POST['action'] == 'Test SMS') { //action for Test SMS Button

   //grab ntid and phone from header
   if(isset($_POST['ntid'])) $ntid = $_POST['ntid'];
   if(isset($_POST['phone'])) $phone = $_POST['phone'];

   //using the notify_sms_users funtion from send_notification.php
   require 'send_notification.php';
   notify_sms_users(array($ntid), "", 4);

   //alert user that there message has been sent
   $alert = "Your message has been sent to " . $phone;
   echo '<script type="text/javascript">alert("'.$alert.'");';
   echo '</script>';

   header('Location: index.php');

} else {-----action for other submit button------}

1 ответ

Это нелегко... Вы можете сделать это так, если отправите форму в IFRAME, но сегодня это считается устаревшим. Однако с минимальными изменениями он может работать с вашим текущим кодом - вам нужно всего лишь изменить тег формы и добавить элемент iframe:

<iframe name="myIframe" id="myIframe"></iframe>
<form action="updateUserConfig.php" method="post" target="myIframe">

Таким образом, вы можете предупреждать после POST, но так как принимающий php будет работать внутри iframe, вам придется использовать javascript для навигации по родительской (исходной) странице. Эта часть проста - просто очень необычна. Вам придется сделать

parent.location="mynextpage.php"

чтобы это произошло. Кроме того, это также имеет ограничения для междоменной вещи. (Для этих проблем, Google для "Access-Control-Allow-Origin", который является официальным решением - и вы, вероятно, также увидите некоторые грязные обходные пути.)

С AJAX, конечно, все по-другому. Но я не могу объяснить это в одном посте - он требует обратного подхода, вы отправляете форму, получаете что-то обратно из сценария php, который обрабатывал сообщение, и тогда ваш исходный javascript выдаст предупреждение. Я бы не рекомендовал этот способ, если вы не сделали этого раньше.

Другие вопросы по тегам