如何在没有js的情况下创建AJAX端点?

时间:2021-04-28 作者:TheWhiteFang

我的问题很简单。我正在从事一个将WordPress用作无头CMS(类似)的项目。我创建了一个ajax端点,但它总是返回400。现在,我创建了一个子主题来测试这些功能。下面是函数。我正在使用的php。

<?php

function login_with_ajax()
{
    echo "hey"; exit();
    $username = $_POST[\'username\'];
    $password = $_POST[\'password\'];

    if (!$username) {
        echo json_encode(
            array(
                \'status\' => false,
                \'message\' => \'Username is required\'
            )
        );
        exit();
    }
    if (!$password) {
        echo json_encode(
            array(
                \'status\' => false,
                \'message\' => \'Password is required\'
            )
        );
        exit();
    }

    $creds = array();
    $creds[\'user_login\'] = $username;
    $creds[\'user_password\'] = $password;
    $creds[\'remember\'] = true;

    $user = wp_signon($creds, false);

    $userID = $user->ID;

    wp_set_current_user($userID, $username);
    wp_set_auth_cookie($userID, true, false);
    do_action(\'wp_login\', $username);

    if ( is_user_logged_in() ) {
        echo json_encode(
            array(
                \'status\' => true,
            )
        );
    } else {
        echo json_encode(
            array(
                \'status\' => false,
                \'message\' => \'Invalid login credentials\'
            )
        );
    }
}

add_action("wp_ajax_nopriv_login_ajax", "login_with_ajax");

我正在尝试使用这样的fetch访问它。

fetch(\'/wp-admin/admin-ajax.php\', {
    method: \'POST\',
    headers: { \'content-type\': \'application/json\' },
    body: JSON.stringify({ username: \'thewhitefang\', password: \'@bhishek01\', action: \'login_ajax\' }),
})
我做错什么了吗?

编辑:此端点将不会在WordPress中使用。

1 个回复
最合适的回答,由SO网友:Buttered_Toast 整理而成

当在wordpress中使用JS fetch api时,您的问题在于主体。

fetch以wordpress无法理解的方式传递正文数据。

你的身体:{}应该是这样的

body: new URLSearchParams({
    username: \'thewhitefang\',
    password: \'@bhishek01\',
    action: \'login_ajax\'
})
您还需要更改内容类型。\'Content-Type\': \'application/x-www-form-urlencoded\'

我不能很好地解释这一点,因为我从来没有真正深入研究过这个问题,但我相信你可以找到你需要的一切。

希望这有帮助=]