Php 在WordPress中是Ajax吗

Php 在WordPress中是Ajax吗,php,ajax,wordpress,Php,Ajax,Wordpress,在WordPress中,是否仍然可以检测当前服务器操作当前是否是AJAX请求 例如: is_ajax() 我不确定WordPress是否有这样的功能,但可以自己创建一个简单的功能 if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Is AJAX request return

在WordPress中,是否仍然可以检测当前服务器操作当前是否是AJAX请求

例如:

is_ajax()

我不确定WordPress是否有这样的功能,但可以自己创建一个简单的功能

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}

要查看当前请求是否是从js库(如jQuery)发送的AJAX请求,可以尝试以下操作:

if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
      strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
    //This is an ajax request.
}

更新:自WordPress4.7.0以来,您可以调用函数。这是更可取的,因为“做Ajax”不同的插件可以过滤将“假”变为“真”


原始答复:

如果您使用的是Ajax,那么可以测试
DOING\u Ajax
常量:

if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }

我知道这是一个古老的线索,但有一个问题与公认的答案

如果请求指向admin-AJAX.php文件,那么检查定义的do_AJAX常量将始终为true。()

有时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.
}

(可能会发表评论……但没有代表)

引入了一种检查AJAX请求的简单方法,因此我想我会补充这个老问题

wp_doing_ajax()
从:

  • 描述:确定当前请求是否为WordPress Ajax请求

  • Return:(bool)如果是WordPress Ajax请求,则为True,否则为false


它本质上是一个做AJAX的包装器。

我个人更喜欢
wp\u DOING\u AJAX()
,但这里是另一个应该做的例子

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}

如果什么是当前的ajax请求?“它”可以是任何意思。那么您需要在哪里/为什么检查这个问题呢?从您的问题的措辞来看,您似乎不完全确定AJAX是什么。我建议看看这个:不做检查,所以也许你不需要?如果您使用的是jQuery,您可以随时在调用服务器时添加一个
?ajax=1
,如果您愿意的话。各位,我想问的是“这个服务器请求是页面请求还是ajax请求的结果”。这是一个非常合理的问题,不过我同意可以再详细一点。尽管如此,我还是会+1,因为我以前在这里没见过它,为了阻止草率的否决。尽管如此!空可能不需要,因为它不会返回错误。实际上,
isset
是不需要的
empty
检查变量是否已经存在。@SpencerCameron-如果该元素不存在,
empty
没有
isset
不会发出PHP警告吗?我想empty()检查的第一件事是isset()?所以isset()会使empty()多余。我知道它们都会自己工作,但empty()做的第一件事肯定是检查isset()?+1以获得较短的版本,对我来说,今天学到了一些东西。HTTP_X_REQUESTED_WITH不会出现在Wordpress的$服务器中。@vee,
HTTP_REQUESTED_WITH
不是由Wordpress设置的。如果请求的发起者传递了它的头,它就会被填充。+1表示特定于WordPress。我忘了他提到他在用WP。在那种环境下,这将是首选的方式。链接中没有提到。为了这个问题,我昨天搜索了一下自己——你知道这上面真的有WP文档吗?它不在文档中(但它是一个wiki,所以你可以添加它!),但它在代码中。没有比代码更好的文档了。AJAX以“codex”的方式使用wp admin/admin-AJAX.php,如果您查看该文件的顶部,您将看到DOING_AJAX defined。您可以在本页的if语句中看到它的引用。在代码中添加一些注释将是有益的。感谢这一点-特别是这允许我在Woocommerce调用AJAX修改人员购物车时不运行函数。
if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}