为什么对 php 的简单 ajax 调用会表现出如此奇怪的行为?
Why does a simple ajax call to php exhibit such strange behavior?
我正在调用一个 jQuery 移动表单到一个简单的 PHP 邮件文件。我已经使用从 ajax 调用传递的相同数据测试了 PHP 文件,它工作得很好。但是,当使用 ajax 时,不会发送电子邮件并且地址栏包含查询字符串。我真的需要更多的眼睛看这个,因为我的眼睛似乎永远交叉。
表格摘录
<form id="hipaa-form" name="hipaa-form" autocomplete="on" data-ajax="false">
<p data-role="fieldcontain">
<label for="name">Name:<span class="smallred">*</span></label>
<input type="text" name="name" id="name" autofocus required placeholder="Full Name">
</p>
<p>
<input type="submit" name="send" id="send" style="cursor:pointer" value="Submit">
</p>
</form>
JavaScript
$('#hipaa-form').on('submit', function (e) {
var data = $(this).serialize();
$.ajax({
type: "GET",
url: email.php,
data: data,
dataType: "text",
success: function (result) { alert(result); },
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert("Error: " + +err.Message)
}
});
});
注意数据变量设置正确,是地址栏中结束的字符串。来自成功功能的警报显示了整个网页,但再次没有发送电子邮件。我尝试在 PHP 中设置自定义错误处理程序,但它们根本没有帮助。
PHP
$body = "Full Name: " . $_GET["name"] . "\r\n";
$body = $body . "email: " . $_GET["email"] . "\r\n";
$body = $body . "Phone: " . $_GET["phone"] . "\r\n";
$body = $body . "website: " . $_GET["Website-URL"] . "\r\n";
$body = $body . "app. type: " . $_GET["pgm-type"] . "\r\n";
$body = $body . "uses DB: " . $_GET["uses-db"] . "\r\n";
$body = $body . "saves data: " . $_GET["stores-patient-data"] . "\r\n";
$body = $body . "db vendor: " . $_GET["database-vendor"] . "\r\n";
if (isset($_GET["db-other"]))
$body = $body . "other db: " . $_GET["db-other"] . "\r\n";
$to = "contact.us@bunkerhill.com";
$subject = "HIPAA Form Submission";
mail($to, $subject, $body, "From: contact.us@text.bunkerhill.com");
echo "Form Submitted"
?>
我的测试站点是:http://test.bunkerhill.com/
TIA
您需要使用 preventDefault() 阻止提交表单;
$('#hipaa-form').on('submit', function (e) {
e.preventDefault();
...
}
您的 ajax 请求应使用带有 GET 的查询字符串参数,或者更改为 type: "POST"
并调整您的 PHP 以使用 $_POST
示例:
type: "GET",
url: "page.php?foo=x&bar=y"
或
type: "POST",
url: "page.php",
data: data
最后,我有点担心这个包含 HIPAA 信息的示例。您可能想考虑一种方法,将信息存储在安全位置并简单地发送一封电子邮件,上面写着 "Hey a new message is available. Click here to authenticate against our secure system to read it." 并不是说您的方法有任何绝对错误,但感觉有额外的 HIPAA 相关责任考虑。
url
参数在你的 Ajax 定义中应该是 'email.php' 在引号中,所以改变
url: email.php
到
url: 'email.php'
否则它只是向 http://test.bunkerhill.com/ 发送调用,而您的 PHP 代码发送电子邮件根本不会被调用 :)
我正在调用一个 jQuery 移动表单到一个简单的 PHP 邮件文件。我已经使用从 ajax 调用传递的相同数据测试了 PHP 文件,它工作得很好。但是,当使用 ajax 时,不会发送电子邮件并且地址栏包含查询字符串。我真的需要更多的眼睛看这个,因为我的眼睛似乎永远交叉。
表格摘录
<form id="hipaa-form" name="hipaa-form" autocomplete="on" data-ajax="false">
<p data-role="fieldcontain">
<label for="name">Name:<span class="smallred">*</span></label>
<input type="text" name="name" id="name" autofocus required placeholder="Full Name">
</p>
<p>
<input type="submit" name="send" id="send" style="cursor:pointer" value="Submit">
</p>
</form>
JavaScript
$('#hipaa-form').on('submit', function (e) {
var data = $(this).serialize();
$.ajax({
type: "GET",
url: email.php,
data: data,
dataType: "text",
success: function (result) { alert(result); },
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert("Error: " + +err.Message)
}
});
});
注意数据变量设置正确,是地址栏中结束的字符串。来自成功功能的警报显示了整个网页,但再次没有发送电子邮件。我尝试在 PHP 中设置自定义错误处理程序,但它们根本没有帮助。
PHP
$body = "Full Name: " . $_GET["name"] . "\r\n";
$body = $body . "email: " . $_GET["email"] . "\r\n";
$body = $body . "Phone: " . $_GET["phone"] . "\r\n";
$body = $body . "website: " . $_GET["Website-URL"] . "\r\n";
$body = $body . "app. type: " . $_GET["pgm-type"] . "\r\n";
$body = $body . "uses DB: " . $_GET["uses-db"] . "\r\n";
$body = $body . "saves data: " . $_GET["stores-patient-data"] . "\r\n";
$body = $body . "db vendor: " . $_GET["database-vendor"] . "\r\n";
if (isset($_GET["db-other"]))
$body = $body . "other db: " . $_GET["db-other"] . "\r\n";
$to = "contact.us@bunkerhill.com";
$subject = "HIPAA Form Submission";
mail($to, $subject, $body, "From: contact.us@text.bunkerhill.com");
echo "Form Submitted"
?>
我的测试站点是:http://test.bunkerhill.com/
TIA
您需要使用 preventDefault() 阻止提交表单;
$('#hipaa-form').on('submit', function (e) {
e.preventDefault();
...
}
您的 ajax 请求应使用带有 GET 的查询字符串参数,或者更改为 type: "POST"
并调整您的 PHP 以使用 $_POST
示例:
type: "GET",
url: "page.php?foo=x&bar=y"
或
type: "POST",
url: "page.php",
data: data
最后,我有点担心这个包含 HIPAA 信息的示例。您可能想考虑一种方法,将信息存储在安全位置并简单地发送一封电子邮件,上面写着 "Hey a new message is available. Click here to authenticate against our secure system to read it." 并不是说您的方法有任何绝对错误,但感觉有额外的 HIPAA 相关责任考虑。
url
参数在你的 Ajax 定义中应该是 'email.php' 在引号中,所以改变
url: email.php
到
url: 'email.php'
否则它只是向 http://test.bunkerhill.com/ 发送调用,而您的 PHP 代码发送电子邮件根本不会被调用 :)