【问题标题】:How to get success message after submit on same page - not in new page在同一页面上提交后如何获得成功消息 - 不在新页面中
【发布时间】:2016-11-27 14:29:43
【问题描述】:

我的提交成功消息显示在新页面中。

如何让它与提交按钮显示在同一页面中?

contact.php

<?php 
// configure
$from = 'email'; 
$sendTo = 'email';
$subject = 'new message';
$fields = array('uname' => 'Jmeno', 'surname' => 'Spolecnost', 'phone' => 'Telefon', 'uemail' => 'Email', 'message' => 'Obsah zpravy'); // array variable name => Text to appear in email
$okMessage = 'success';
$errorMessage = 'error';

// let's do the sending  
try
{
    $emailText = "Mate novou zpravu z web formulare: example.cz\n=============================\n";
    foreach ($_POST as $key => $value) {
        if (isset($fields[$key])) {
            $emailText .= "$fields[$key]: $value\n";
        }
    } 
    mail($sendTo, $subject, $emailText, "From: " . $from);

    $responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);

    header('location: contact.php?success=1');

    echo $encoded;
}
else {
    echo $responseArray['message'];
}
?>

提交按钮的JS:

 $(".open4").click(function() {
        $('#basicform').validator();
            $('#basicform').on('submit', function (e) {
                if (!e.isDefaultPrevented()) {
                    var url = "contact.php";
                    $.ajax({
                        type: "POST",
                        url: url,
                        data: $(this).serialize(),
                        success: function (data)
                        {
                            var messageAlert = 'alert-' + data.type;
                            var messageText = data.message;

                            var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';
                            if (messageAlert && messageText) {
                                $('#basicform').find('.messages').html(alertBox);
                                $('#basicform')[0].reset();
                            }
                        }
                    });
                    return false;
                }
            })

【问题讨论】:

    标签: javascript php forms submit


    【解决方案1】:

    有两个地方可能会出现问题:

    1.PHP 代码将你重定向到一个新页面(嗯,页面是一样的,但它会用?success=1 参数重新加载):

    header('location: contact.php?success=1');
    

    如果您不想重新加载页面,请尝试以下操作:

    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        echo json_encode($responseArray);
    } else {
        echo $responseArray['message'];
    }
    

    2.HTML 表单提交事件将您重定向到新页面。您可以尝试为submit 事件禁用表单的默认行为:

    $(".open4").click(function() {
        $('#basicform').validator();
        $('#basicform').on('submit', function (e) {
    
            //prevent Default functionality
            e.preventDefault();
    
            var url = "contact.php";
            $.ajax({
                type: "POST",
                url: url,
                data: $(this).serialize(),
                success: function (data)
                {
                    var messageAlert = 'alert-' + data.type;
                    var messageText = data.message;
    
                    var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';
                    if (messageAlert && messageText) {
                        $('#basicform').find('.messages').html(alertBox);
                        $('#basicform')[0].reset();
                    }
                }
            });
            return false;
        });
    });
    

    【讨论】:

    • 试过了,没用。它是相同的并重定向到新页面contact.php
    • 我没有注意到您没有禁用表单的默认行为。检查我更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2017-04-19
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多