我想我已经看了太多的代码,在试图更好地理解WordPress和AJAX中的表单时把自己弄糊涂了。本周我开始学习如何为页面创建表单并通过AJAX提交表单。
该页面是一个模板,我已经研究了两种处理方法。一种是通过重定向到PHP,例如:
<form action="<?php echo get_template_directory_uri() . "/validation.php"; ?>" id="contactForm">
</form>
在阅读了几个关于该主题的帖子后,应该对表单进行单独验证。这是正确的吗?为什么?另一个问题是,如果我确实想在模板页面上处理表单,表单操作应该如下所示:<form action="#" id="contactForm">
</form>
但在WordPress之外,我看到:<form action="" id="contactForm">
</form>
为什么会这样?在AJAX部分,我看到了以下区别:jQuery.ajax({
type :"post",
url: ajaxurl,
}
});
然后是不同的URL:jQuery.ajax({
type :"post",
dataType:"json",
url: MBAjax.admin_url,
}
});
最后一点:jQuery.ajax({
type :"post",
dataType:"json",
url: /wp-admin/admin-ajax.php?action=contactForm",
}
});
那么,在WordPress中编写动作的正确方法是什么呢是否在同一页上处理表单
Reference points:
- Form submission using AJAX and handling response in Wordpress Website
- Submitting HTML form using Jquery AJAX
- Handling an Ajax form submit
- Custom Form with Ajax
- Submitting a form with ajax in Wordpress
- submitting a form in wordpress using ajax
- Ajax Form Post Submission Using Wordpress
- How To Build Your Own WordPress Contact Form and Why
编辑:
进一步阅读后,决定进入RESTful提交。我引用了“REST APIs for Absolute Beginners“但我没有得到我所希望的回报:HTML:
<form id="contactForm" action="" method="POST">
<div class="form-group">
<label for="form_email"><span class="asterisk">*</span>Email address:</label>
<input type="email" class="form-control" id="form_email">
</div>
<div class="form-group">
<button id="form_submit" class="supportbutton" type="submit">Submit</button>
</div>
</form>
<div id="testForm"></div>
jQuery:
$(document).ready(function() {
$(\'#contactForm\').submit(function(e) {
e.preventDefault();
jQuery.ajax({
url: \'<?php echo home_url(); ?>/wp-json/darthvader/v1/contact\',
type: \'post\',
dataType: \'json\',
data: $(\'#contactForm\').serialize(),
success: function(data) {
$("#testForm").html(data);
},
error: function() {
alert("There was an issue");
},
});
});
});
functions.php:
add_action(\'rest_api_init\', function() {
register_rest_route(\'darthvader/v1\', \'/contact/\', array(
\'methods\' => \'POST\',
\'callback\' => \'darth_contact_form\'
));
});
function darth_contact_form(\\WP_REST_Request $request) {
$email = $request[\'form_email\'];
return "Your contact request had the title " . $email;
}
为什么我只能Your contact request had the title
在回信上,而不是在电子邮件上?