我尝试用ajax运行wp表单,但控制台返回wordpress admin ajax。php 400错误请求。
jQuery(function ($) {
$(document).ready(function () {
jQuery(\'#form_add_to_cart\').on(\'submit\', function () {
jQuery.ajax({
url: \'https://domain.com/wp-admin/admin-ajax.php\',
method: \'post\',
contentType : \'application/json; charset=utf-8\',
data: $("#form_add_to_cart").serializeArray(),
success: function (response) {
alert(response);
},
fail: function (err) {
alert("There was an error: " + err);
}
});
return false;
});
});
});
这是我的功能。php文件:
add_action(\'wp_ajax_send_form\', \'send_form\'); // This is for authenticated users
add_action(\'wp_ajax_nopriv_send_form\', \'send_form\'); // This is for unauthenticated users.
function send_form(){
if (isset($_POST[\'send_form\'])){
echo\'ok\';
}
else{
echo \'bad\';
}
}
和我的表格:
<form name="form_add_to_cart" method="POST" class="form_product" id="form_add_to_cart" action="">
<input hidden="hidden" name="action" id="add_product_to_cart"
value="send_form">
<input class="btn btn-primary" type="submit"
name="add_to_cart-<?php echo $product_id; ?>" id="add_to_cart"
value="Dodaj">
所有形式:
https://pastebin.com/YJXTjGjJ工作:
jQuery(function ($) {
$(document).ready(function () {
jQuery(\'#form_add_to_cart\').on(\'submit\', function () {
jQuery.ajax({
url: \'https://domain.com/wp-admin/admin-ajax.php\',
method: \'post\',
data: $("#form_add_to_cart").serializeArray(),
success: function (response) {
alert(response);
},
fail: function (err) {
alert("There was an error: " + err);
}
});
return false;
});
});
});
最合适的回答,由SO网友:Sally CJ 整理而成
你的full form code 包含名为的隐藏输入action
具有值send_form
.
然而,由于contentType
JS脚本的一部分,它将表单数据作为JSON负载提交,但请注意admin-ajax.php
端点不支持JSON负载,因此$_REQUEST[\'action\']
将为空,除非您将其添加到URL查询字符串中,因此WordPress不知道AJAX操作是什么。因此,只要从JS代码中删除以下内容,错误就会消失:
contentType : \'application/json; charset=utf-8\', // remove this
此外,您的表单没有名为
send_form
, 所以在你的
send_form()
函数,此操作将失败:
if (isset($_POST[\'send_form\']))
. 因此,您应该将输入添加到表单中或更改
if
条件
还有,你应该打电话wp_die()
在函数末尾退出页面并阻止WordPress打印0
(零)。