Admin-ajax.php与AJAX请求的自定义页面模板

时间:2012-07-22 作者:Adam Capriola

是否有任何理由使用admin ajax。php for ajax请求与定制页面模板?

我不知道管理ajax。直到最近,我一直在做的是创建一个自定义页面模板,如下所示:

<?php
/**
 * Template Name: API
 */

if ( isset( $_GET[\'ajax_request\'] ) ) {
// do stuff
}
ajax调用将指向URLhttp://mysite.com/api/, 在这里,我使用API页面模板发布了一个空白页面。这似乎让我可以访问我的所有WordPress函数并输出数据。

然而,最近我读到了管理ajax。php和了解连接WordPress数据库的另一种方法是调用URLhttp://mysite.com/wp-admin/admin-ajax.php 并具有如下功能:

add_action( \'wp_ajax_nopriv_action\', \'my_do_stuff\' );
add_action( \'wp_ajax_show_action\', \'my_do_stuff\' );

function my_do_stuff() {
// do stuff
}
第一条路连接错误吗?管理ajax。php提供额外的安全性还是什么?感谢您的任何意见!

2 个回复
最合适的回答,由SO网友:Milo 整理而成

首先,第一种方法的明显缺点是,它依赖于您的特定页面、模板和永久链接结构来正常工作。使用admin-ajax.php 在遵循WordPress最佳实践的任何上下文、主题或插件中都能正常工作。

第一种方法不太明显的缺点是,它使用的内存比支持WordPress的AJAX调用要多,因为整个WordPress环境都是加载的,因为假定将输出前端或管理页面。

将nonce与admin-ajax.php 提供简单的内置安全性。

SO网友:Drywall

admin-ajax.php 并不总是正确的方式。例如,如果你想获取一篇文章,你最好使用下面的方法template_redirect() 加载返回JSON(或任何需要返回的内容)的自定义模板。

为什么?缓存。当您使用admin-ajax.php 您基本上消除了一些缓存系统保存服务器响应输出的机会(通常不应该缓存admin URL,特别是admin-ajax.php)。使用template_redirect() 另一方面,允许维护许多缓存插件和HTTP加速器可能用来保存数据的单独URL。甚至一些后端缓存系统也可能不参与admin-ajax.php 如果配置为在以下情况下避免缓存is_admin().

当然,如果你没有得到像帖子这样相当静态的东西,缓存实际上可能是一件非常糟糕的事情。。。在这种情况下admin-ajax.php 是一个更好的选择。

结束