我正在尝试将表单数据发送到名为attendants
的表。我已经创建了表单,AJAX和查询,但是尝试进行测试(提交表单时)时,控制台上出现POST http://localhost/rsvp/wp-admin/admin-ajax.php 400 (Bad Request)
错误。
不确定是什么原因造成的,因为当我运行console.log(ajaxurl);
时,它返回的URL是http://localhost/rsvp/wp-admin/admin-ajax.php
,这是正确的。
不确定这里发生了什么吗?
编辑:我最近发现http://localhost/rsvp/wp-admin/admin-ajax.php
返回0
。
form.php(文件夹路径:rsvp>模板零件>零件> form.php):
<div class="form sectionPadding" id="rsvp-form">
<form id="rsvpForm" method="post">
<?php get_template_part('template-parts/snippets/form-step-1'); ?>
<?php get_template_part('template-parts/snippets/form-step-2'); ?>
</form>
</div>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>
form.js(form.js
编译为theme.min.js
。theme.min.js
的路径为rsvp>资产>构建> js> theme.min.js):
jQuery('#rsvpForm').on('submit', function(e) {
e.preventDefault();
jQuery.ajax({
action: 'send_to_db',
dataType: "text",
type: "post",
data: $('form').serialize(),
url: ajaxurl,
success: function(data) {
console.log(data);
},
error: function() {
console.log("Error");
}
});
});
functions.php
add_action("wp_ajax_send_to_db", "send_to_db");
add_action("wp_ajax_nopriv_send_to_db", "send_to_db");
function send_to_db(){
if (isset($_POST['submit'])) {
global $wpdb;
$first_name = $_POST['fname'];
$table_name = $wpdb->prefix . "attendants";
$row_result = $wpdb->query("INSERT INTO $table_name (first_name) VALUES ('$first_name')" );
if ($row_result == 1){
echo "submitted";
} else{
echo "error";
}
die();
}
}
总而言之,我的文件夹结构是:
rsvp
assets
build
js
theme.min.js
template-parts
parts
form
form.php
form.js
functions.php
编辑:我最近发现
http://localhost/rsvp/wp-admin/admin-ajax.php
返回0。
这确实是预期的返回值,因为您的请求URL不包含AJAX action名称。另外,HTTP响应状态也将是一个400 Bad Request
,这基本上意味着“缺少操作名称”或“该操作的未注册任何回调”。
因为在您的form.js
脚本中,action
参数应该在data
中-并且据我所知,jQuery.ajax()
没有action
属性:
jQuery.ajax({
action: 'send_to_db', // this should be in 'data'
...
data: $('form').serialize(),
...
});
所以您可以像这样:data: $('form').serialize() + '&action=send_to_db'
:
jQuery.ajax({
...
data: $('form').serialize() + '&action=send_to_db',
...
});
这样,WordPress将识别AJAX操作(通过$_REQUEST['action']
),然后运行适当的AJAX handler / PHP callback,在您的情况下为send_to_db()
。
并且您可以通过访问/wp-admin/admin-ajax.php?action=send_to_db
来确认您的AJAX回调是否已正确注册-您是否仍然看到0
?