为AJAX请求设置CORS标头

时间:2021-07-23 作者:TheWhiteFang

我试图在另一个子域中使用wp-ajax,但我遇到了CORS错误。为了解决这个问题,我使用add_action 使用send_headers 挂钩:

function cors_header () {
    header(\'Access-Control-Allow-Origin: *\');
}
add_action(\'send_headers\', \'cors_header\');
但这也没用。这是我的全部代码:

function get_user_id () {
    $email = $_POST[\'email\'];
    if (!$email) {
        status_header(401, \'Unauthorized Request\');
        exit();
    }
    $form_id = 25;
    $search_criteria = array(
        \'status\'     => \'active\',
        \'field_filters\' => array(
            array(
                \'key\' => \'2\', \'value\' => $email,
            )
        )
    );
    
    $entries = GFAPI::get_entries($form_id, $search_criteria);
    
    add_action(\'send_headers\', \'cors_header\');
    
    echo json_encode($entries[0][\'created_by\']);
    exit();
}

function cors_header () {
    header(\'Access-Control-Allow-Origin: *\');
}
add_action("wp_ajax_nopriv_user_id", "get_user_id");
add_action("wp_ajax_user_id", "get_user_id");

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

这个send_headers hook 在(管理)AJAX请求期间不会激发(因为没有“main WordPress query”,所以wp() 函数不运行,因此钩子也不会被触发),因此如果要发送CORS头(和任何其他头),那么只需调用header() 在AJAX回调中,如下所示:

function get_user_id() {
    header( \'Access-Control-Allow-Origin: *\' );

    // ... the rest of your code
}
顺便说一句,“;get\\u user\\u id“;是一个非常通用的名称,因此请使用一个唯一的名称,例如在其前面加上;my\\u plugin\\u ajax\\uquot;如中所示my_plugin_ajax_get_user_id.

此外,还有wp_send_json() 您可以使用它从AJAX回调发送JSON响应。

最后但并非最不重要的一点是,考虑改用RESTAPI,它默认启用CORS,并且响应也是JSON(因此基本上只需要返回输出,例如。return $entries[0][\'created_by\'];). 请参见REST API handbook 了解更多详细信息。

相关推荐

管理-登录时出现AJAX触发错误400

啊,是的,ol\'admin ajax错误400问题。我已经看过了here 和here 和here 为了一个解决方案,这些都没有解决我的问题。所以在这被标记为副本之前,请听我说完。我的管理ajax链接如下所示:<script type="text/javascript"> var ajaxurl = "https://full-url.com/wp-admin/admin-ajax.php"; </script>