是否有方法检测当前服务器操作是否当前是WordPress中的AJAX请求?
例如:is_ajax()
更新:从WordPress 4.7.0开始,你可以调用函数wp_doing_ajax()。这是可取的,因为"做Ajax"不同的插件可以过滤把"假"变成"真"。
原始回答:
如果您按照指南中的建议使用Ajax,那么您可以测试DOING_AJAX
常量:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
WordPress 4.7引入了一种简单的方法来检查AJAX请求,所以我想我应该添加这个老问题。
wp_doing_ajax()
来自开发者参考:
Description:判断当前请求是否为WordPress Ajax请求
Return:(bool)如果是WordPress Ajax请求,则为True,否则为false。
它本质上是DOING_AJAX的包装器
要查看当前请求是否是从js库(如jQuery)发送的AJAX请求,您可以尝试这样做:
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
我知道这是一个旧的线程,但是有一个问题与接受的答案,
检查定义的DOING_AJAX常量将始终为true,如果请求是针对admin-ajax.php文件。# L16 (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php)
有时admin-ajax.php钩子不用于AJAX请求,只是一个简单的端点(例如Paypal IPN)。
正确的方法是Ian和Spencer所提到的。
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;
}
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
}