Conditional Ajax inclusion

时间:2012-10-31 作者:Sagive

我有一个自定义界面,在运行时使用30多个ajax文件
某些文件仅在类别中使用。php而其他的仅在页面中使用。php。。。

我在函数中包含了ajax加载程序php文件。php文件

example:

include TEMPLATEPATH . \'/ajaxLoops/ajax-open_client_editform.php\';
include TEMPLATEPATH . \'/ajaxLoops/ajax-submit_client_editform.php\';
这一切都很好,但当我尝试在函数中直接使用is\\u页面或is\\u类别有条件地加载它们时。php ajax函数停止工作。

示例:

if(is_page()) {
    include TEMPLATEPATH . \'/ajaxLoops/ajax-open_client_editform.php\';
}
    include TEMPLATEPATH . \'/ajaxLoops/ajax-submit_client_editform.php\';
我想这是一个装载顺序的问题或一些我不知道的其他问题。。。。你能帮我理解我的方法的问题吗?或者有条件加载此文件的替代方法?。。。

干杯,萨吉夫。

EDIT 1 (.PHP AJAX LOADER FILE):

<?php
wp_enqueue_script( \'ajax-simple-example\', get_stylesheet_directory_uri().\'/ajaxLoops/ajax-simple_example.js\', array(\'jquery\'), 1.0 ); // jQuery will be included automatically
wp_localize_script( \'ajax-simple-example\', \'ajax_object\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) ); // setting ajaxurl

add_action( \'wp_ajax_action_simple_example\', \'ajax_simple_example\' ); // ajax for logged in users
function ajax_simple_example() {

    // just an empty example for my question
    // in stackexchange

    echo \'<div id="success">\'.$successMsg.\'</div>\';

    die(); // stop executing script
}
?>

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

当您调用admin ajax时。php未生成任何查询,因此is_page()is_category() 或者任何基于查询的条件标记永远不会返回true。更好的方法是将文件包含在ajax回调中,意思如下:

add_action(\'wp_ajax_PAGE_ONLY_ACTION\',\'PAGE_ONLY_Function\');

function PAGE_ONLY_Function(){
    include TEMPLATEPATH . \'/ajaxLoops/ajax-open_client_editform.php\';
    /**
     * do your page only ajax 
     */
    die();
}


add_action(\'wp_ajax_CATEGORY_ONLY_ACTION\',\'CATEGORY_ONLY_Function\');

function CATEGORY_ONLY_Function(){
    include TEMPLATEPATH . \'/ajaxLoops/ajax-submit_client_editform.php\';
    /**
     * do your Category only ajax 
     */
    die();
}
因此,您可以一直添加动作挂钩,但仅在需要时才包含文件。

结束

相关推荐

在使用AJAX的POST调用中未显示幻灯片

这是我用来在同一页面中调用ajax帖子的代码。这很好,但当帖子加载时,帖子中的幻灯片(通过短代码添加)不会显示。。。。ajax调用 jQuery(\'#menu-profilo > li > a\').click(function(event){ //This keeps the href from reloading the page event.preventDefault();