【发布时间】:2018-07-22 13:38:33
【问题描述】:
我正在尝试通过 ajax 提交表单并发布到 /wp-admin/admin-ajax.php,但我收到响应代码 400。
我是这样提交表格的:
$.ajax("/wp-admin/admin-ajax.php", {
type: 'post',
dataType: 'json',
data: form_data,
success : function(response) {
console.log('working', responseText)
},
error: function(err){
console.log('err', err)
}
});
在我的 Wordpress 后端,我只有一个动作和我的处理函数:
function panacea_form_process() {
// do whatever you need in order to process the form.
return 'working';
}
add_action("wp_ajax_nopriv_panacea_form", "panacea_form_process");
我一直在关注本指南 - https://teamtreehouse.com/community/submitting-a-form-in-wordpress-using-ajax,但已尝试将其简化以进行调试。
我尝试使用 nonce,但我认为我不需要它,因为只有登录的用户才需要它?
碰壁,所以任何建议都将不胜感激。谢谢。
编辑:
已添加本地化脚本:
wp_localize_script( "_main-sripts",
'theUniqueNameForYourJSObject',
array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( "randomstring" ),
)
);
使用本地化的管理 url 和操作名称等更新了我的 ajax 调用
$.ajax(theUniqueNameForYourJSObject.admin_url, {
type: 'post',
dataType: 'json',
data: data : {action: "panacea_form", form_data : form_data, nonce: theUniqueNameForYourJSObject.nonce},
success : function(responseText, statusText, xhr, $form) {
console.log('working', responseText)
},
error: function(err){
console.log('err', err)
}
});
更新了我的操作以使用 wp_send_json 返回并包含登录用户的操作:
function panacea_form_process() {
// do whatever you need in order to process the form.
wp_send_json('working');
}
add_action("wp_ajax_nopriv_panacea_form", "panacea_form_process");
add_action("wp_ajax_panacea_form", "panacea_form_process");
【问题讨论】: