【发布时间】:2015-04-08 13:34:27
【问题描述】:
自从过去两天以来,我一直在尝试在 JavaScript 和 PHP 之间进行通信。在阅读了其他人遇到的类似问题的大量教程、建议和解决方案后,我还无法按预期成功。可以这么说,我是在我的一个域上编程,而不是在本地编程。
目标是:
从我的 JavaScript 中格式正确的对象向我的电子邮件地址发送格式非常正确的字符串。为了做到这一点,我知道需要使用著名的 email() 函数来执行 PHP 脚本。
为实现目标所采取的步骤:
- 拥有一个功能正常的 JavaScript(没有错误),可以创建数据并将数据填充到上述 JS 对象(命名为:'person');
- 将其格式化为一个好的字符串(因为我希望它以纯文本格式而不是 HTML 格式发送);
- 让 jQuery 的 $.ajax() 调用与服务器端进行 CORS 交互,这是一个包含必要标头和代码的 PHP发送一封简单的邮件到指定的目的地(例如我的电子邮件地址)。
- (可选)经过 GZIP 压缩,缩小 HTML/CSS/JS 以更快地向客户端加载内容。
问题是什么?
我的 AJAX 代码运行平稳,没有错误,但与预期和预期不符。它没有跳入/进入 SUCCESS,而是立即进入 ERROR 自定义功能,我似乎无法破译可能出现的问题。
我将在 JS(AJAX 调用)和我用来实现上述目标的 PHP 脚本下方发布。
JavaScript(更新):
function submitOnClick() {
var full_name = "John Doe";
var profile_person = "--[Name: John, Surname: Doe, Birthday: 25/02/1950]--";
var hr = new XMLHttpRequest();
hr.open("POST", "submit_to_email.php", true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send("full_name=" + full_name + "&" + "person=" + profile_person);
hr.onreadystatechange = function () {
if (hr.readyState == 4 && hr.status == 200) {
var data = hr.responseText;
console.log("PHP responded with: " + data);
}
}
}
PHP 脚本(更新):
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Content-Type: application/json');
$postvars = $_POST['person'];
//var_dump($postvars);
if (isset($postvars)) {
$to = 'to@gmail.com';
$subject = 'Subject Title';
$email_message = $postvars;
$headers = 'From: noreply@mydomain.com'."\r\n".
'Reply-To: noreply@mydomain.com'."\r\n" .
'X-Mailer: PHP/' . phpversion();
$checker = @mail($to, $subject, $email_message, $headers);
if ($checker == true) {
echo 'Mail was sent to'.$to;
}
else {
echo 'Mail was NOT sent to'.$to;
}
}
?>
<?php
die();
?>
更新
$.ajax() 根本没有必要,而是开始使用带有 XMLHttpRequest() 方法的普通 JS。内容已成功发送到我的 PHP 文件,但通过检查 mail() 是否为真/假(已发送/未发送)结果 FALSE。需要一个配置文件来为 PHP 提供我的 SMTP 设置信息。我正在使用 Arvixe 托管,它安装了一个 IIS 服务器。我对网络托管和维护域有点陌生,因此我不知道是否应该在我的项目文件夹中配置 web.config 文件或添加扩展 PHP 配置文件。
【问题讨论】:
-
我看不到你从哪里得到 $_POST['some'] 数据
-
$postvars = file_get_contents('php://input');类似于使用 $_POST['some]。如果我不得不使用后者,那么我必须在 ajax 的“数据”属性中使用一个对象,而不是数组。
-
尝试这样做并打印出来进行调试。如果您可以获得适当的数据,那么您解析的方式就有问题。将它用于您的 JSON jsonlint.com 另外,您不会在错误时缺少分号:onFailure }) 吗?
-
缺少分号:真。现在更新了。如何实现将 php 中的解析值打印到控制台或我的 DOM 元素中的任何位置?
-
我试过你的确切代码。我不得不注释掉
mail()函数,因为它在我的 PC 上没有很好地配置,所以它给了我一个错误,但是在这样做之后,我没有出错。您的问题肯定出在mail()抛出错误,从而发送 500 错误代码或使输出无效 JSON,因此 jQuery 将其视为错误。
标签: javascript php email smtp