使用违反AJAX的jQuery加载动态内容

时间:2010-12-20 作者:jetDL

我正在创建一个只使用主页的主题。单击按钮后,该部分的内容将通过AJAX(下面的脚本)加载到主页上的div中。

$.ajaxSetup ({  
    cache: false  
});  
    var ajax_load = "<center><img src=\'<?php bloginfo("template_url"); ?>/images/loading.gif\' alt=\'Loading...\' /></center>";  

    var loadUrl = "http://localhost:8888/cnNew/?portfolio=portfolio-test"; 
        $("#ourTeam").click(function(){
            $("#main")
                .html(ajax_load)
                .load(loadUrl + " #content");
        });
所有的。正在通过wp\\u enqueue\\u脚本加载js文件:

function my_init() {
    if (!is_admin()) {
        // comment out the next two lines to load the local copy of jQuery
        wp_deregister_script(\'jquery\');
        wp_register_script(\'jquery\', \'https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js\', false, \'1.4.3\');
        wp_enqueue_script(\'jquery\');
        wp_enqueue_script( \'galleria_plugin\', get_bloginfo(\'template_directory\') . \'/js/galleria.js\', array(\'jquery\') );
    }
}
add_action(\'init\', \'my_init\');

function my_scripts() {
    wp_enqueue_script( \'carousel\', get_bloginfo(\'template_directory\') . \'/js/carousel.js\', array(\'jquery\') );
    wp_enqueue_script( \'backstretch\', get_bloginfo(\'template_directory\') . \'/js/jquery.backstretch.min.js\', array(\'jquery\') );
    wp_enqueue_script( \'nivo_slider\', get_bloginfo(\'template_directory\') . \'/js/jquery.nivo.slider.pack.js\', array(\'jquery\') );
    wp_enqueue_script( \'tabify\', get_bloginfo(\'template_directory\') . \'/js/jquery.tabify-1.4.js\', array(\'jquery\') );
    wp_enqueue_script( \'mouse_wheel\', get_bloginfo(\'template_directory\') . \'/js/scroll/jquery.mousewheel.js\', array(\'jquery\') );
    wp_enqueue_script( \'scroll_pane\', get_bloginfo(\'template_directory\') . \'/js/scroll/jquery.jscrollpane.min.js\', array(\'jquery\') );
}
add_action(\'template_redirect\', \'my_scripts\');
问题:

由于当单击按钮时,页面不会刷新,并且内容通过AJAX加载到DIV中,所以我猜,加载的内容使用jQuery和其他。js文件被破坏,因为。js文件已经加载,页面上没有该内容。

我需要找到一种方法来“刷新”已加载的。js文件,以便新加载的内容不会出现损坏。还是我的做法不对?

谈到AJAX,我是个新手,因为这是我第一次使用它。我得到的是:http://www.wphardcore.com/2010/5-tips-for-using-ajax-in-wordpress/ 作为参考,但我发现我很难理解。

谢谢你的帮助!

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

因此,如果您说没有错误,那么我假设您的问题是AJAX请求更改DOM,以及在此之前加载的脚本。

如果文档发生更改,您需要告诉脚本,以便脚本在新内容上触发事件。

因此:

要么在AJAX更新文档后重新加载所有脚本(然后应该将脚本标记放在正在更改的元素中),这很难看

或使用live(), 或livequery() 在脚本中扫描文档更改。例如:

$(".bla").click(function(){ ... })

应更改为

$(".bla").live(\'click\', function(){ ... }


    来自jquery API,live():

    描述:立即为与当前选择器匹配的所有元素的事件附加处理程序and in the future.

    update:

    tabify脚本在文档中启动。标题中的ready部分是:$(“#caseSections”)。tabify();并用于辅助页面(通过ajax通过单击按钮加载到主页的页面)

    因此,tabify将应用于初始文档中的#caseSections选择器。我想这是可行的。您的问题是,它在AJAX更新页面后停止工作,对吗?

    解决:

    由于它未设置为在特定事件中触发,因此需要安装;将我上面提到的livequery脚本排队。然后更改$(\'#caseSections\').tabify(); 使用:

    $(\'#caseSections\').livequery(function(){ $(this).tabify(); });

    $(\'#caseSections\').tabify(); 再次在AJAX完成后,在“success”函数中。

结束

相关推荐

从admin-ajax获取CAT参数

我有一个plugin that restricts the categories 用户可以在管理员中查看/编辑。WordPress 3.0.1中的所有功能都很好,但当我开始测试3.1时,我注意到类别过滤器(AJAX)允许您绕过这些限制。我可以在3.0.1中过滤掉它,因为它是通过URL参数提交的。我的问题是无法从新的AJAX请求中获取“cat”参数。我已尝试测试$\\u服务器[\'HTTP\\u X\\u REQUESTED\\u WITH\'],但它没有注册。我在wp黑客邮件列表上问过这个问题,但没有人能