发布嵌套JSON到WordPress Admin AJAX -无法访问对象数据

i5desfxk  于 2022-11-19  发布在  WordPress
关注(0)|答案(1)|浏览(154)

我试图模拟一个有效负载,一旦设置了集成,我的WordPress webhook将接收到该负载。该负载将包含嵌套的JSON。我无法在我的PHP函数中访问JSON对象中的数据。
这是我可以预期的有效载荷的结构:

data: {
  attributes: {
    user_name: "John Doe",
    user_email: "johndoe@xyz.com"
  }
}

下面是我尝试POST相同数据的JavaScript:

fetch(wp_ajax.ajax_url, {
    method: 'POST',
    body: new URLSearchParams({
        action: 'course_signup',
        data: {
            attributes: {
                user_name: "John Doe",
                user_email: "johndoe@xyz.com"
            }
        }
    })
})
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.log(err));

下面是我的PHP:

<?php
add_action('wp_ajax_course_signup', 'course_signup');
add_action('wp_ajax_nopriv_course_signup', 'course_signup');

function course_signup()
{   
    $data = json_decode($_POST['data']);
    $user_name = $data['attributes']['user_name'];
    $user_email = $data['attributes']['user_email'];

    $data = $_POST['data'];
    echo json_encode(array(
        "action" => $_POST["action"],
        "user_name" => $user_name,
        "user_email" => $user_email
    ));

    die();
}

下面是我的console.log(response))的响应:

{
   action: "course_signup",
   user_email: null,
   user_name: null
}

在POST请求的“Network”(网络)选项卡中,我看到有效负载为:

action: course_signup
data:  [object Object]
s3fp2yjn

s3fp2yjn1#

感谢CBroe,
使用Postman有助于简化这一过程。
我将PHP更新为以下版本,这样我就可以访问所需的数据:

$payload = json_decode(file_get_contents('php://input'), true);
$user_name = $payload['data']['attributes']['user_name'];
$user_email = $payload['data']['attributes']['user_email'];

相关问题