在Wordpress中发出ajax发布请求

时间:2018-02-12 11:35:19

标签: ajax wordpress

我正在尝试通过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");

2 个答案:

答案 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时呼叫仍然有效。