0

我有一个主要使用 JQuery 编写的页面,最后我想发送一封包含页面结果的电子邮件。我的脚本中有这段代码:

索引.html

var myUrl = "http://mywebsite/mail.php";
$.ajax({
       type: "POST",
       url: myUrl,
       cache: false,
       contentType: "application/json; charset=utf-8",
       data: {  body:"test",
                to:"myemail@gmail.com",
                subject:"Test Results"
             },
       dataType: "json",
       complete: function(transport, data){  
                    console.log(data);
                    if (transport.status == 200) 
                        alert("Worked.");
                    else 
                        alert("Didn't work, " + transport.status); 
                }
   });

我知道我的 .php 文件有正确的路径,因为如果我更改“myURL”变量,我会收到错误消息。这是我的另一个文件:

邮件.php

<?php

$body = $_POST['body'];
$to = $_POST['to'];
$subject = $_POST['subject'];

mail($to, $subject, $body);
?>

问题是,虽然我的 jquery 返回警报“Worked”,并且似乎一切正常,但我的 mail.php 文件似乎从未运行过:我没有看到那里的任何控制台日志出现,而我的索引文件中的控制台日志确实出现了。我也没有收到电子邮件,但没有出现错误。我什至尝试在 .php 文件中故意放入错误,但什么也没发生。我认为这是某种小问题,因为我以前从未真正使用过 php,所以希望问题很简单。

--EDIT-- 所以我更新了我的代码,由于某种原因,我不再在我的 index.html 文件中看到 console.logs,即使它们之前显示过。如果我能得到关于我应该使用 $.post 还是 $.ajax 的答案,那就太好了,而且我仍在寻找一种方法来确认邮件命令是否正在运行。谢谢。

--EDIT 2-- 当我调用console.log(data)我的索引文件时,我在控制台中看到“parsererror”。有谁知道这可能是什么原因?

4

5 回答 5

2

console.log 是一个 JavaScript 函数。您在该部分解析 PHP - 您尝试在 php 中使用 javascript,这从根本上是不可能的事情。

Ajax 通过发送数据请求并接收响应来工作。这与访问网页时所做的相同:请求页面,然后返回 HTML。使用 AJAX,您请求资源,然后返回 JSON(因此名称为 AJAX:异步 Javascript 和 XML)。PHP标签之间的东西是服务器自己工作,独立于客户端。在继续之前,您需要了解这里的区别。

其次,<script>从您的 PHP 脚本中删除您的标签,它可能会解决您的问题。否则,您将向 mail() 函数提供不正确的参数。

- 编辑 -

此外,您正在为您的请求错误地格式化您的“数据”参数。将其编码为实际的 JSON 变量:您的:

data: "{ 'body':'"  + latestResult + "'," +
                     "'to': '" + email + "'," +
                     "'subject': " + subject + "'" +
                 "}",

矿:

data: {body:latestResult,
       to:email,
       subject:subject
       },

如果您对您和我之间的区别感到困惑,请阅读JSON(Javascript 对象表示法) 。

希望这可以帮助!

于 2013-06-06T22:15:41.223 回答
1

将 index.html 更改为:

var myUrl = "http://mywebsite/mail.php";
    console.log(email);
    $.ajax({
       type: "POST",
       url: myUrl,
       cache: false,
       contentType: "application/json; charset=utf-8",
       data: "{ 'body':'"  + latestResult + "'," +
                 "'to': '" + email + "'," +
                 "'subject': " + subject + "'" +
             "}",
       dataType: "json",
       complete: function(transport, data){
                   console.log(data);

                    if (transport.status == 200) 
                        alert("Worked.");
                    else 
                        alert("Didn't work, " + transport.status); 
                }
   });

注意 console.log(data) 行,这将记录 mail.php 页面显示的任何内容。请注意,这不会显示您的 console.log 消息。因此,现在将您的 mail.php 更改为:

    <?php

$subject = $_POST['subject'];
$to = $_POST['to'];
$body = $_POST['body'];
$header = "From:someone@something.com \r\n
            Content-type: text/html\r\n";

echo $subject;
echo $to;
echo $body;
echo $header;

?>

这应该为您提供进一步排除故障所需的信息。

编辑以返回 JSON 格式的数据:

    <?php

$subject = $_POST['subject'];
$to = $_POST['to'];
$body = $_POST['body'];
$header = "From:someone@something.com \r\n
            Content-type: text/html\r\n";

$array = array(
    "subject" => $subject,
    "to" => $to,
    "body" => $body,
    "header" => $header,
);

echo json_encode($array);


?>
于 2013-06-06T22:38:17.890 回答
0

尝试混合使用 javascript 和 php 会导致一些问题,并且对于 ajax 请求(json?html?)实际返回的内容存在一些混淆。

这个版本可能会更好一些:

var myUrl = "http://mywebsite/mail.php";
console.log(email);
$.post(myUrl, {body: latestResult, to: email, subject: subject}, function(data) {
    console.log(data.subject);
    console.log(data.to);
    console.log(data.body);
    alert('Worked')
}, 'json');

使用如下所示的 PHP 文件:

<?php
$subject = $_POST['subject'];
$to = $_POST['to'];
$body = $_POST['body'];
$header = "From:someone@something.com \r\n
           Content-type: text/html\r\n";

//Send the email.
mail($to, $subject, $body, $header);
echo(json_encode(array('subject' => $subject, 'to' => $to, 'body' => $body)));
?>

基本上,所有的console.log()东西现在都发生在它所属的 javascript-land 中。PHP 脚本正在发送电子邮件,然后返回一个 JSON 文档,其中包含主题、收件人和正文值……然后可以由在完成时运行的 javascript 函数记录。

于 2013-06-06T22:22:45.243 回答
0

对我来说,您似乎没有在 AJAX 请求中正确发送您的帖子数据。你不应该用引号括起来它应该是这样的:

data: {
   "body" : "value",
   "to" : "value",
}

确保您检查您的帖子数据也来自您的 PHP 端。

您也可以在 PHP 中解析 JS。(您的 mail.php 文件)

于 2013-06-06T22:14:49.023 回答
0

一次迈出这一步。

首先,确保您的 PHP 文件能够正确发送电子邮件。通过创建一个简单的表单来发布到它,如下所示:

<form method=post action="http://mywebsite/mail.php">
    <input type=text name=subject value="Sample Subject" />
    <input type=text name=to value="me@myemail.com" />
    <input type=text name=body value="Sample Body" />
    <input type=submit value="Send Mail" />
</form>

现在,您可以只echo()从您的 PHP 文件中提取任何内容,并且您的任何回显都将显示在浏览器中。

一旦您的 PHP 文件正常工作,您就可以开始使用 ajax 发布到它。您应该像这样定义一个数据变量:

var postData = {
    body: latestResult,
    to: email,
    subject: subject        
}

...然后使用 . 将整个数组记录到控制台console.log(postData)

于 2013-06-06T22:40:13.883 回答