【发布时间】:2017-09-12 15:33:04
【问题描述】:
我完全迷路了。谁能检查我在这里尝试创建的表单出了什么问题?它应该在 WP 自定义主题中使用 Ajax 发送数据,而不需要在数据库中记录任何内容。
控制台给我一个错误“名字未定义”,jQuery 的第 67 行 - data:{name:firstname, email:email, message:comment,action:'validate_form'},但实际上,我相信它会不止于此。
<form class="form">
<div class="form__item form__item_no-margin">
<input type="text" name="firstname" placeholder="What's your name?*" class="firstname" required>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<input type="text" name="email" placeholder="What's your email address?*" class="email" required>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<textarea name="comment" placeholder="Please, leave a message!*" class="textarea" required></textarea>
<p class="error-message">This is field is required!</p>
</div>
<div class="form__item">
<input type="button" name="submit" value="Send" class="submit-btn">
<p class="error-message error-message_main val-error">All the required fields have to be filled out.</p>
<p class="success-message val-success">Thanks. I'll contact you ASAP!</p>
</div>
</form>
还有一些 jQuery:
jQuery(document).ready(function(){
jQuery(".submit-btn").click(function(e){
e.preventDefault();
var name = jQuery(".firstname").val();
var email = jQuery(".email").val();
var message = jQuery(".textarea").val();
var ajaxUrl = "/wp-admin/admin-ajax.php";
if(name === "" || email === "" || message === "") {
jQuery(".val-error, .error-message").show();
jQuery("html, body").animate({
scrollTop: jQuery(".val-error").offset().top
}, 700)
}
else {
jQuery.ajax({
url: ajaxUrl,
method:"POST",
data:{name:firstname, email:email, message:comment,action:'validate_form'},
success: function(data) {
jQuery("form").trigger("reset");
jQuery(".val-success").show(fast);
}
});
}
});
});
functions.php 文件中的 PHP:
add_action('wp_ajax_myaction', 'my_action_callback');
add_action('wp_ajax_nopriv_myaction', 'my_action_callback');
function my_action_callback(){
$name= trim($_POST["firstname"]);
$email = trim($_POST["email"]);
$comment = trim($_POST["comment"]);
$page_title = "New form submission";
$message = "Name: $name \nEmail: $email \nMessage: $comment";
mail('some@email.com', $page_title, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: some@email.com" );
wp_die();
}
更新
附件是codepen中的新版本。 PHP 在下面。
https://codepen.io/anon/pen/RVWaJY
add_action('wp_ajax_myaction', 'validate_form_callback');
add_action('wp_ajax_nopriv_myaction', 'validate_form_callback');
function validate_form_callback(){
$name= trim($_POST["firstname"]);
$email = trim($_POST["email"]);
$comment = trim($_POST["comment"]);
$page_title = "New form submission";
$message = "Name: $name \nEmail: $email \nMessage: $comment";
mail('some@email.com', $page_title, $message, "Content-type:
text/plain; charset=\"utf-8\"\n From: some@email.com" );
wp_die();
}
【问题讨论】:
-
WordPress 中有数以千计的 ajax 教程。我什至在这里做到了:stackoverflow.com/questions/31587210/…。首先,永远不要那样称呼
ajaxurl。将其本地化。其次,data对象中的变量firstname在哪里?最后,你为什么不使用$而不是到处粘贴jQuery。把它放在你的`jQuery(document).ready(function($){. Is your jquery in a separate script, dependent onjQuery`? -
嘿,伙计。感谢您的回复。问题是我不是技术人员。我花了 3 天时间才让我上面提交的代码至少可以通过验证工作。现在我不知道我应该去哪里。这就是我寻求帮助的原因。 WP 的 Codex 文档对我没有任何帮助。
-
@zametsv - 现在的实际问题是什么? (CodePen 只是表明没有 jQuery 存在,因此不工作)
-
@bestprogrammerintheworld 现在的问题是,即使我在表单字段中有数据,它仍然会验证它,如果没有任何内容,并显示错误消息。而且,它不会向 PHP 中的指定电子邮件发送任何数据。