Javascript 要进入页面或重新加载电子邮件,无需单击“提交”按钮

Javascript 要进入页面或重新加载电子邮件,无需单击“提交”按钮,javascript,php,html,forms,Javascript,Php,Html,Forms,当点击联系人表单页面时,电子邮件会在没有点击提交按钮的情况下收到,并且在刷新页面时也会出现。我想在点击提交按钮的同时也在同一页面中 我的html代码 <form action="" method="post" id="commentform"> <fieldset> <p class="field"><input type="text" name="author" required value="" placeholder="Na

当点击联系人表单页面时,电子邮件会在没有点击提交按钮的情况下收到,并且在刷新页面时也会出现。我想在点击提交按钮的同时也在同一页面中

我的html代码

<form action="" method="post" id="commentform">
    <fieldset>
        <p class="field"><input type="text" name="author" required value="" placeholder="Name:"/><span class="required"></span></p>
        <p class="field"><input type="text" name="email" required value="" placeholder="email:"/><span class="required"></span></p>
        <p class="field"><input type="text" name="url" required value="" placeholder="Website:"/><span class="required"></span></p>
        <p><textarea name="comment"required value="" placeholder="Your comment:"/>Your comment*</textarea><span class="required"></span></p>
        <p class="comment_submit">
            <input name="send" type="submit" class="btn btn-primary" id="submit" tabindex="5" value="Submit Comment"/>
            <input type='hidden' name='comment_post_ID' value='65' id='comment_post_ID'/>
            <input type='hidden' name='comment_parent' id='comment_parent' value='0'/>
        </p>
    </fieldset>
</form>
if(isset($_POST['Submit'])) {
    $author = $_POST["author"]; 
    $email= $_POST["email"];
    $url= $_POST["url"];
    $comment =$_POST["comment"]; 
    $message = "Name :".$author."\n"."Email :".$email."\n"."Website :".$url."\n"."Comment :".$comment;
    $subject ="Visitor Enquiry";
    $to = "name@gmail.com";

    if(mail($to, $subject,$message)) {
        echo "We Received Your enquiry, We'll get back to you soon";
    } 
    else { 
       echo "There were some errors sending enquiry, please try again";
    }
}

你的代码都在一页里吗?您需要将其分开-一个页面是表单的html,它的
action
属性设置为说
email.php
,其中您有php代码发送电子邮件,并最终将用户重定向到您想要的任何地方

如果您希望在不重新加载页面的情况下进行提交,您可以添加任何类型的javascript提交,但仍然需要上述内容

如果您已经在使用jQuery,下面是一个很好的教程:

听起来您希望表单通过提交。简而言之,这意味着使用JavaScript将表单数据发送到服务器,由PHP脚本处理,而不是由浏览器处理

如果您使用的是jQuery,您可以使用它轻松地“升级”表单以使用AJAX。您还可以使用jQuery的
.serialize()
()函数将表单元素转换为可以使用jQuery的
$.ajax
函数()发送到服务器的对象。还有一个速记功能
$.post
,用于处理post请求

后者可能看起来像这样:

var $form = $('#commentform');
$form.on('submit', function (e) {
    e.preventDefault(); // Stops the browser submitting the form

    var data = $form.serialize(), // Convert form to JSON object
        postURL = $form.attr('action') // Get the URL of the form's target;

    // Submit the form via AJAX
    $.post(postURL, data, function (data) {
        // Show the response from the server at the top of the form
        $form.prepend('<p class="message">' + data + '</p>');
    });
});
(您会注意到我更正了一些打开/关闭PHP标记。所有PHP代码都必须在
标记内

进一步改进的建议

这只是操作的基本内容。要创建良好的用户体验,您需要在提交表单后显示某种“加载”状态,以便在将请求发送到服务器并进行处理时,您的用户知道发生了什么(通常,浏览器会通过重新加载页面并显示微调器等方式处理此问题)

您还需要以某种方式验证输入数据-您目前根本没有这样做。我建议您进行一些基本的验证,例如要求在电子邮件字段中输入一个值。您应该使用PHP和JavaScript进行验证,以便在表单发送到服务器之前验证用户输入

您可能还希望根据请求是成功还是失败,将输出消息上的类设置为,例如,如果成功,您可以将消息设置为绿色,如果失败,则设置为红色


如果您在实现这些改进方面遇到困难,那么jQuery文档是一个很好的起点,或者在此处查找或发布问题。

OP不一定需要将其HTML表单和PHP代码分离到单独的文件中。这是一个很好的可维护性和分离关注点的方法,但它不是他的问题的解决方法。是的,这是我用单独的页面尝试的问题。它工作正常,但是,我想在不重新加载页面的情况下保持在同一页面上。请建议javascript代码来解决这个问题。谢谢
<?php
    if(isset($_POST['Submit']))
    {
        $author = $_POST["author"];
        $email= $_POST["email"];
        $url= $_POST["url"];
        $comment =$_POST["comment"]; 
        $message = "Name :".$author."\n"."Email :".$email."\n"."Website :".$url."\n"."Comment :".$comment;
        $subject ="Visitor Enquiry";

        $to = "name@gmail.com";
        if(mail($to, $subject,$message))
        {
            echo "We Received Your enquiry, We'll get back to you soon";
        }
        else
        { 
            echo "There were some errors sending enquiry, please try again";
        }

        $via_ajax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
        // If requested via AJAX, end the request now so we just send one of the above messages, not an entire HTML page. 
        if ($via_ajax)
        {
            die;
        }
    }

?>