是否有办法检测当前服务器操作当前是否是 WordPress 中的 AJAX 请求?
例如:
is_ajax()
更新:从 WordPress 4.7.0 开始,您可以调用函数wp_doing_ajax()。这是更可取的,因为以不同方式“执行 Ajax”的插件可以过滤以将“假”变为“真”。
原答案:
如果您按照 codex 中的建议使用 Ajax ,则可以测试DOING_AJAX
常量:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
WordPress 4.7引入了一种简单的方法来检查 AJAX 请求,所以我想我会添加到这个旧问题。
wp_doing_ajax()
来自开发者参考:
说明:判断当前请求是否为 WordPress Ajax 请求。
返回:(bool) 如果是 WordPress Ajax 请求则为真,否则为假。
它本质上是 DOING_AJAX 的包装器。
要查看当前请求是否是从 js 库(如jQuery )发送的AJAX请求,您可以尝试以下操作:
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
我不确定 WordPress 是否有此功能,但可以通过自己创建一个简单的功能来完成。
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// Is AJAX request
return true;
}
我知道这是一个旧线程,但接受的答案存在问题,
如果请求是对 admin-ajax.php 文件的请求,那么检查定义的 DOING_AJAX 常量将始终为真。(https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16)
有时 admin-ajax.php 钩子不用于 AJAX 请求,只是一个简单的端点(例如 Paypal IPN)。
正确的方法是伊恩和斯宾塞提到的。
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
(会发表评论......但没有代表)
if ( ! function_exists('is_ajax') ) {
function is_ajax() {
return defined( 'DOING_AJAX' );
}
}
我个人更喜欢wp_doing_ajax()
,但这是另一个应该这样做的例子。
if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
// is doing ajax
}