Запретить перенаправление после отправки формы - PullRequest
21 голосов
/ 28 октября 2010

У меня есть HTML-форма, которая отправляет электронное письмо с PHP, и при отправке перенаправляет на эту страницу PHP.Есть ли способ предотвратить это перенаправление?Я создал анимацию с помощью jQuery, которую я хочу использовать вместо перенаправления.Я пытался вернуть false ;, но это не сработало.Вот моя функция:

$(function() {
    $('.submit').click(function() {
        $('#registerform').submit();
        return false;
    }); 
});

Вот открывающий тег формы:

<form id="registerform" action="submit.php" method="post">

И кнопка отправки:

<input type="submit" value="SUBMIT" class="submit" />

Ответы [ 13 ]

34 голосов
/ 28 октября 2010

Вы должны опубликовать его с помощью ajax, это помешает ему изменить страницу, и вы все равно получите информацию обратно.

$(function() {
    $('form').submit(function() {
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: { username: $(this).name.value, 
                    password: $(this).password.value }
        });
        return false;
    }); 
})

См. Опубликовать документацию для JQuery

12 голосов
/ 28 октября 2010

Вместо возврата false вы можете попробовать event.preventDefault (); как это:

$(function() {
$('#registerform').submit(function(event) {
    event.preventDefault();
    $(this).submit();
    }); 
});
5 голосов
/ 13 мая 2016
$('#registerform').submit(function(e) {
   e.preventDefault();
   $.ajax({
        type: 'POST',
        url: 'submit.php',
        data: $(this).serialize(),
        beforeSend: //do something
        complete: //do something
        success: //do something for example if the request response is success play your animation...
   });

})
5 голосов
/ 29 октября 2010

Использование Ajax

Используя метод запроса jQuery Ajax , вы можете отправить данные электронной почты в сценарий (submit.php).Использование опции обратного вызова success для анимации элементов после выполнения скрипта.

note - я бы предложил использовать объект ответа ajax, чтобы убедиться, что скрипт успешно выполнен.

$(function() {
    $('.submit').click(function() {
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: 'password=p4ssw0rt',
            error: function()
            {
               alert("Request Failed");
            },
            success: function(response)
            {  
               //EXECUTE ANIMATION HERE
            } // this was missing
        });
        return false;
    }); 
})
5 голосов
/ 28 октября 2010

Если вы хотите, чтобы информация в форме обрабатывалась страницей PHP, тогда вы ДОЛЖНЫ сделать вызов этой странице PHP.Чтобы избежать перенаправления или обновления в этом процессе, отправьте информацию о форме через AJAX.Возможно, используйте диалоговое окно jQuery для отображения результатов или собственную анимацию.

4 голосов
/ 28 октября 2010

Трудно сказать, точно зная, что вы пытаетесь выполнить, но если вы потратите время на решение этой проблемы с помощью javascript, AJAX-запрос будет вашим лучшим выбором. Однако, если вы хотите сделать это полностью в PHP, поместите это в конец вашего скрипта, и вы должны быть установлены.

if(isset($_SERVER['HTTP_REFERER'])){
    header("Location: " . $_SERVER['HTTP_REFERER']);    
} else {
    echo "An Error";
}

Это все равно приведет к изменению страницы дважды, но пользователь перейдет на страницу, инициирующую запрос. Это даже не самый правильный способ сделать это, и я настоятельно рекомендую использовать AJAX-запрос, но он выполнит свою работу.

3 голосов
/ 28 октября 2010

Если вы можете запустить javascript, который выглядит так, как вы, создайте новый iframe и отправьте сообщение в этот iframe. Вы можете сделать <form target="iframe-id" ...> Таким образом, все перенаправления происходят в iframe, и вы по-прежнему можете контролировать страницу.

Другое решение - сделать сообщение через ajax. Но это немного сложнее, если на странице требуется проверка ошибок или что-то еще.

Вот пример:

$("<iframe id='test' />").appendTo(document.body);
$("form").attr("target", "test");
1 голос
/ 14 марта 2017

Вы должны поместить возврат внутрь вызова submit ().

  $('.submit').click(function() {
     $('#registerform').submit(function () {
     sendContactForm();
     return false;
    });
    //Here you can do anything after submit
}
1 голос
/ 13 мая 2016

Точно так же, как Брюс Армстронг предложил в свой ответ . Однако я бы использовал FormData:

$(function() {
    $('form').submit(function() {
        var formData = new FormData($(this)[0]);
        $.ajax({
            type: 'POST',
            url: 'submit.php',
            data: formData,
            processData: false,
            contentType: false,
        });
        return false;
    }); 
})
1 голос
/ 07 июля 2014

Вы можете использовать, как показано ниже

e.preventDefault() 

Если этот метод вызывается, действие по умолчанию для события не будет запущено.

Также, если я могу предложить прочитать это: .prop() vs .attr ()

Я надеюсь, это поможет вам,

пример кода:

$('a').click(function(event){
    event.preventDefault();
    //do what you want
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...