我正在尝试通过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" ),
)
);
使用本地化管理网址以及操作名称等更新了我的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");
答案 0 :(得分:0)
我尝试过使用nonce,但我相信我并不需要它,因为那只是 登录的用户需要什么?
Nonce - 是必需的。请求将更安全。
你的form_data
怎么样?这应该是json或请求字符串。
并且
function panacea_form_process() {
// do whatever you need in order to process the form.
return 'working';
}
必须有echo
,不能返回。使用wp_send_json()返回数据。或wp_send_json_success()表示成功结果,或enter link description here表示失败。
答案 1 :(得分:0)
您的具体问题可能来自您错过了一个动作。
您使用的是add_action("wp_ajax_nopriv_panacea_form", "panacea_form_process");
,但wp_ajax_nopriv
适用于非特权用户。或者未登录网站的用户/ wp-admin
由于您正在开发网站,您可能已经记录了,所以AJAX调用应该对登录的非登录用户都有效,您需要另外一个操作,所以更改是
add_action("wp_ajax_nopriv_panacea_form", "panacea_form_process");
add_action("wp_ajax_panacea_form", "panacea_form_process");
除此之外,您应该回显来自AJAX调用的结果,在这种情况下返回无法正常工作。理想情况下,您也可以使用wp_send_json
。
提示: 你应该从你排队脚本的地方localize {{3}} ajax URL,以确保在重命名wp-admin时呼叫仍然有效。