Подтвердить что ты не робот

Запретить перенаправление после отправки формы

У меня есть 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" />
4b9b3361

Ответ 1

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

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

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

Ответ 2

Вместо return false вы можете попробовать event.preventDefault(); например:

$(function() {
$('#registerform').submit(function(event) {
    event.preventDefault();
    $(this).submit();
    }); 
});

Ответ 3

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

Ответ 4

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

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

примечание. Я бы предложил использовать объект ответа 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

$('#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...
   });

})

Ответ 6

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

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

Вот пример:

$("<iframe id='test' />").appendTo(document.body);
$("form").attr("target", "test");

Ответ 7

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

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

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

Ответ 8

Конструкция HTTP означает, что создание POST с данными приведет к возврату страницы. Первоначально дизайнеры, вероятно, предназначались для того, чтобы стать "результатом" вашей POST.

Как правило, приложение PHP возвращает POST на ту же страницу, что и не только обрабатывает запрос POST, но и может генерировать обновленную страницу на основе исходного GET, но с новой информацией из POST. Тем не менее, ничего не мешает вашему серверному коду предоставлять совершенно другой результат. Кроме того, вы можете отправить POST на совершенно другую страницу.

Если вы не хотите выводить, один метод, который я видел до того, как AJAX взлетел, был для сервера, чтобы вернуть код ответа HTTP (я думаю) 250. Это называется "Без содержимого", и это должно заставьте браузер игнорировать данные.

Конечно, третий способ - сделать вызов AJAX с вашими представленными данными.

Ответ 9

Простым ответом является снятие вашего звонка на внешний скрипт с помощью запроса AJAX. Затем обработайте ответ, как вам нравится.

Ответ 10

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

e.preventDefault() 

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

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

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

Пример кода

:

$('a').click(function(event){
    event.preventDefault();
    //do what you want
  } 

Ответ 11

Так же, как Брюс Армстронг предложил в его ответ. Однако я бы использовал 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;
    }); 
})

Ответ 12

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

  $('.submit').click(function() {
     $('#registerform').submit(function () {
     sendContactForm();
     return false;
    });
    //Here you can do anything after submit
}

Ответ 13

Вероятно, вам нужно будет выполнить только запрос Ajax на вашу страницу. И, делая return false, вы не делаете то, что, по вашему мнению, делает.

Ответ 14

Вы можете просто сделать свой результат действия как NoContentResult на контроллере

public NoContentResult UploadFile([FromForm] VwModel model)
    {
       return new NoContentResult();
    }