FIKSER
@FIKSER

Как настроить js редирект после отправки данных с формы?

На данный момент форма исправно отправляет информацию, но после отправки данных(т.е нажатия "отправить") ничего не происходит. Я же хочу сделать редирект на другую страницу, либо модальное окно, которое будет оповещать юзеров, что форма успешно отправлена.
JS
https://jsfiddle.net/qosox/g2cbp6ht/1/
PHP
spoiler
<?php

$method = $_SERVER['REQUEST_METHOD'];

//Script Foreach
$c = true;
if ( $method === 'POST' ) {

    $project_name = trim($_POST["project_name"]);
    $admin_email  = trim('info@admin.ru');
    $form_subject = trim($_POST["form_subject"]);

    foreach ( $_POST as $key => $value ) {
        if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
            $message .= "
            " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
                <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
                <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
            </tr>
            ";
        }
    }
} else if ( $method === 'GET' ) {

    $project_name = trim($_GET["project_name"]);
    $admin_email  = trim($_GET["admin_email"]);
    $form_subject = trim($_GET["form_subject"]);

    foreach ( $_GET as $key => $value ) {
        if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
            $message .= "
            " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
                <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
                <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
            </tr>
            ";
        }
    }
}

$message = "<table style='width: 100%;'>$message</table>";

function adopt($text) {
    return '=?UTF-8?B?'.Base64_encode($text).'?=';
}

$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
"Content-Transfer-Encoding: 8bit" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;

mail($admin_email, adopt($form_subject), $message, $headers );
if(@mail($admin_email, $form_subject, $message, $headers, $ip )) {
     header("Location: index.html");
} 
 ?>

Изначально пробовал сделать редирект в php обработчике, но я уже понял, что так не делается)
  • Вопрос задан
  • 535 просмотров
Решения вопроса 1
@dimases
Форма отправляется не обычным сабмитом, а ajax - смотрим в коде JS:
$.ajax({
      type: 'POST',
      url: wpcf7.apiSettings.getRoute('/contact-forms/' + wpcf7.getId($form) + '/send.php'),
      data: formData,
      dataType: 'json',
      processData: false,
      contentType: false
    }).done(function(data, status, xhr) {
      ajaxSuccess(data, status, xhr, $form);
      $('.ajax-loader', $form).removeClass('is-active');
    }).fail(function(xhr, status, error) {
      var $e = $('<div class="ajax-error"></div>').text(error.message);
      $form.after($e);
    });


Там есть два триггера, done и fail. Вот в них можно вставить document.location.href='УРЛ';
Но корячить этот код можно, если в другом месте не используется, иначе надо расширять на множественный функционал, уже правя функцию var ajaxSuccess = function(data, status, xhr, $form)
которая как раз ждет в ответ "status". В нем можно прописать свой вариант, например, redirect и его value. PHP-скрипт должен возвращать dataType: 'json' (именно это и ждут).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы