我试图在另一个子域中使用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");
最合适的回答,由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 了解更多详细信息。