【发布时间】:2015-12-16 15:42:55
【问题描述】:
您好,我目前正在做一个项目。当用户提交表单时,它会将响应加载到 div 中,而不是加载新页面。我在网上查看了与 PHP 一起工作的 ajax 表单的其他示例,但它并没有帮助我解决我的问题。 (我对此比较陌生)。
当我点击提交时,不是将回复发布到同一页面并发送电子邮件到所选的电子邮件地址,而是将我带到 php 文件并在那里回显回复,但不发送任何电子邮件。
谁能看出这是哪里出了问题?
表格代码:
<form name="contactform" id="contact-form" action="mailer.php">
<input type="text" class="textbox" name="name" value="Name" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Name';}">
<input type="text" class="textbox" name="email" value="Email" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';}">
<textarea name="message" value="Message:" required="required" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Message';}">Message</textarea>
<input type="submit" value="Send Now">
</form>
<div id="response"></div>
Javascript 代码:
<script>
$("#contactform").submit(function(event)
{
/* stop form from submitting normally */
event.preventDefault();
/* get some values from elements on the page: */
var $form = $( this ),
$submit = $form.find( 'button[type="submit"]' ),
name_value = $form.find( 'input[name="name"]' ).val(),
email_value = $form.find( 'input[name="email"]' ).val(),
message_value = $form.find( 'textarea[name="message"]' ).val(),
url = $form.attr('action');
/* Send the data using post */
var posting = $.post( url, {
name: name_value,
email: email_value,
message: message_value
});
posting.done(function( data )
{
/* Put the results in a div */
$( "#response" ).html(data);
});
});
</script>
PHP 代码:(我的 php 存储在一个名为 mailer.php 的单独文件中)我正在尝试将 PHP $response 变量回发并放入响应 div。
<?php
// Get the form fields and remove whitespace.
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];
$to = "your-emailaddresshere@email.com";
$subject = "New DPS Email from $name";
// Build the email content.
$email_content = "Name: $name\n";
$email_content .= "Email: $email\n\n";
$email_content .= "Message:\n$message\n";
// Build the email headers.
$email_headers = "From: $name <$email>";
$mailed = (mail($to, $subject, $email_content, $email_headers));
if( isset($_POST['ajax']) )
$response = ($mailed) ? "1" : "0";
else
$response = ($mailed) ? "<h2>Thank You! Your message has been sent.</h2>" : "<h2>Oops! Something went wrong and we couldn't send your message.</h2>";
echo $response;
?>
提前感谢您的帮助!
【问题讨论】:
-
您是否在浏览器的控制台中查看过错误?
-
$.post 中有 var url。愚蠢的问题,但我猜你的代码中的其他地方设置为你的 php 脚本的 url
-
@Y.Hermes 我试过了,不幸的是它似乎并没有改变结果
-
@IWebb 我不确定它是否真的正常工作,但它应该从表单上的 action 变量中获取 php 脚本的 url。我刚刚意识到我的帖子中没有包含它,现在会更新它
-
我知道这个网站是关于一个 JQuery 插件的,但是有一个很好的部分介绍了如何在 chrome 中调试 ajax 请求。 datatables.net/manual/tech-notes/7 诊断位是适用于所有 ajax 请求的有趣位
标签: javascript php jquery html ajax