1

我试图简单地将电子邮件发送到硬编码的电子邮件地址,作为报告错误按钮的功能。但是,我尝试输入到发送电子邮件的 php 文件中的文本不会传输,并且我的 javascript 文件中的电子邮件函数一次发送两封电子邮件。不知道为什么会发生这些。

这是我与电子邮件功能有关的所有代码。

错误页面 (HTML)

<div data-role="page" id="bug">
    <div data-role="header" data-position="fixed">
        <h4>Submit a bug</h4>
    </div>

    <div data-role="content">
        <textarea name="textarea" id="textarea"></textarea>
        <a href="#first" data-icon="check" data-role="button" data-inline="true" name="send" id="send">Send</a>
        <script language="javascript" type="text/javascript">
            $("#send").click(function(){
            email();
            });
            function clearText()
            {
                $('textarea#textarea').val('');
            }           
        </script>
    </div><!-- /content -->
</di> <!-- /bug -->

当用户点击“报告错误按钮”时,会调用上述页面,如下所示:

<a href='#bug' data-rel="dialog" onclick="clearText()" data-close-btn="left" data-role="button" data-inline="true">Report bug</a>

带有电子邮件功能的 Javascript 文件:

function email(){

var name = "Joey"; 
var email = "example@gmail.com"
var vardata = $("textarea").val();

$.ajax({ type: "POST", url: "email.php", data: vardata, success: function() {
alert("Your bug report was sent!");
        }
});

return false;
}

和我的PHP文件称为:

<?php

$message = $_POST["vardata"];

mail("example@gmail.com", "Mystery person", $message);
?>

如果 $message 字段是硬编码的,我可以很好地在电子邮件中获取文本,但它无法从 vardata 标记中获取它。此外,它会提交两次,您可以在此处看到。只需点击报告错误按钮并点击发送。

4

4 回答 4

3

在您的 PHP 文件中,您将获得$_POST["vardata"],但在您的 javascript 中,该字段被调用data。所以$_POST["data"]改用。

于 2013-06-07T19:39:14.057 回答
3

在分析console面板时,似乎进行了两次ajax调用,这是因为id="send"两次附加了点击事件

所以这是首先unbind在锚点上执行所有点击事件id="send"然后附加点击事件的技巧,这将解决两次电子邮件问题

$(document).ready(function(){
$("#send").unbind("click");
$("#send").click(function(){
 email();
});
});
于 2013-06-07T19:50:24.697 回答
3

当您通过 jQuery 的 ajax 方法向 PHP 发送数据时,将其设为 JSON 对象会很有帮助,因此您可以从 PHP 中的 $_POST 数组中获取所需的值。

例如:

var name = "Joey"; 
var email = "example@gmail.com"
var vardata = $("textarea").val();

$.ajax({
    type: "POST",
    url: "email.php",
    data: {name:name, email:email, vardata:vardata}, 
    success: function() {
        alert("Your bug report was sent!");
    }
});

这样,您可以像这样在 PHP 代码中获取数据:

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['vardata'];
于 2013-06-07T19:57:20.710 回答
2

您需要使用名称将数据发送到服务器:

$.ajax({ /* ... */, data: {vardata: vardata}});

至于双重发送,您将click事件连线两次,虽然我看不到第二个事件连线的位置,但我怀疑它是自动生成的,然后被丢弃一次。

jQuery._data($("#send")[0], "events");您可以通过在调试控制台中调用来查看连接的事件。两个事件是连线的,并且两个处理函数是相同的(它们调用email();)。

于 2013-06-07T19:56:26.100 回答