【问题标题】:Making an ajax post request in Wordpress在 Wordpress 中发出 ajax 发布请求
【发布时间】: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");

【问题讨论】:

    标签: ajax wordpress


    【解决方案1】:

    您的具体问题可能来自您错过了一个动作。 您正在使用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 将脚本排入队列的 ajax URL,以确保在 wp-admin 重命名时调用仍然有效。

    【讨论】:

    • 已添加部分操作挂钩,并尝试不登录但得到相同的 400 错误响应。编辑 OP 以显示我的更改
    • 您正在本地化的句柄是 _main-sripts 这是“脚本”的拼写错误,因为如果是这样,则该拼写错误就是它仍然无法工作的原因
    • 您是否需要任何其他帮助或您的问题已解决?
    【解决方案2】:

    我尝试过使用 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 表示失败。

    【讨论】:

    • '请求将更安全'因此不是必需的,但建议这样做。
    • 已添加 wp 响应处理函数,并在 ajax 请求中包含操作名称以及其他一些更改。已将我的更改添加到 OP。不幸的是,仍然得到相同的错误响应 400
    • 检查this topick
    • @MaximSarandi 不工作。得到相同的 400 响应结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多