阿贾克斯,做这件事并让它发挥作用的正确方式吗?

时间:2013-07-09 作者:freaky

我是wordpress新手,但对php和javascript有一定的了解。

我在wordpress上读了很多关于ajax调用的博客。我也在这个论坛上读了一些帖子。然而,我仍然很难用wordpress调用ajax。

我有点困惑在哪里add_action 必须编写钩子(在自定义php函数文件或function.php文件内?或以其他方式)。

调用jquery脚本时,wp_ajax 未定义。。。我不明白我的jquery脚本如何wp_ajax url或php中的其他变量。

以下是我的不同脚本:

在我的功能中。php(我真的不知道我是需要把它放在这里还是放在我的自定义php文件中):

wp_enqueue_script(\'load_post\', get_template_directory_uri().\'/js/load_post.js\', array(\'jquery\'), \'1.0\', 1 );
wp_localize_script( \'load_post\', \'wp_ajax\',
        array( \'url\' => admin_url( \'admin-ajax.php\' ), \'nonce\' => wp_create_nonce(\'ajax_nonce\') )); 
在load\\U post中。php

<?php

add_action(\'wp_ajax_load_post\', \'load_post_callback\');
add_action(\'wp_ajax_nopriv_load_post\', \'load_post_callback\');

function load_post_callback() {

if (isset($_POST[\'post_ids\'])) {

    $nonce = $_POST[\'nonce\']; 
    if ( ! wp_verify_nonce( $nonce, \'ajax-nonce\' ) ) {
        die ( \'Interdit !\');
    }

    $ids = array(); 
    $ids[] = $_POST[\'post_ids\'];

    $posts_per_page = 8;
    global $wp_query;
    query_posts(array(\'post_type\' => array(\'post\', \'portfolio\'), \'post__not_in\' => $ids, \'posts_per_page\' => $posts_per_page));
    while (have_posts()) : the_post();

    $post_type = get_post_type( $post->ID );
    if ($post_type == \'post\') {
        $post_type = \'blog\';
    }
?>

//I do some stuff echo...

<?php
    endwhile;
    wp_reset_query();
    }
}
?>
和load\\u post。js公司

jQuery(document).ready(function($) { 

    jQuery(\'#next-container\').click(function() { 

        var IDs = [];
        $(".element").each(function(){ IDs.push(this.id); });

        $(\'#next-container\').html(\'loading\');

        $.ajax({
            type: \'POST\',
            url: wp_ajax.url,
            data: {  action: \'load_post\',  
                     ajax_nonce: wp_ajax.nonce,
                    \'post_ids\': IDs,  
                  },  //{\'post_ids[]\': IDs },//\'post_ids=\'+IDs,
            success: function(data) {
                    $(\'#next-container\').html(\'\');  
                    $container.isotope( \'insert\', $(data));

                    }
                })
        })
})

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

在您的功能中。php文件您应该添加一个操作以将脚本排队。

<?php
function my_enqueue_scripts() {
    wp_enqueue_script(
        \'load_post\', 
        get_template_directory_uri() . \'/js/load_post.js\', 
        array( \'jquery\' ), 
        \'1.0\', 
        1
    );
    wp_localize_script( 
        \'load_post\', 
        \'wp_ajax\',
        array( 
            \'url\' => admin_url( \'admin-ajax.php\' ), 
            \'nonce\' => wp_create_nonce( \'ajax_nonce\' )
        )
    );
}
add_action( \'wp_enqueue_scripts\', \'my_enqueue_scripts\' );

SO网友:Mehrwash Faruqi

我也有一些问题,这就是我如何通过Windows scroll上的Ajax调用功能

    $(document).live(\'scroll\',(function(){
        // if ($(window).scrollTop() + $(window).height() == $(document).height())
        if ($(window).scrollTop() == $(document).height() - $(window).height())  {
          LoadonButton();
        }
    }));
函数LoadonButton(){
var sessionCommentId=$(“.message\\u box:last”).attr(“id”);jQuery(“\\35; slick slidetoggle”).show();jQuery.ajax({类型:\'POST\',url:\'http://dino-dev.com/foodie/wp-admin/admin-ajax.php\',
数据:{
操作:“HomeComments”,编号:“10”,CommentLoadeId:sessionCommentId},
成功:函数(数据,textStatus,XMLHttpRequest){

    jQuery(".comment_box:last").after(data);  
    },  
error: function(MLHttpRequest, textStatus, errorThrown){  
}
});}

但是我在HomeComments中调用的插件有问题。已调用插件函数,但未填充选项表或缺少其他内容。如何确保插件正确加载。当我直接调用这个函数时,它工作得非常好。

结束

相关推荐

检查插件中是否存在带有AJAX的前端电子邮件地址

我正在努力想办法解决这个问题。我在这里遵循了针对AJAX的wordpress codex:http://codex.wordpress.org/AJAX_in_Plugins我一直返回的是0,我从来没有得到1。知道为什么吗?我的代码如下。PHP:add_action(\'wp_enqueue_scripts\', \'live_validation\' ); add_action(\'wp_ajax_validate_email\', \'validate_email_input\');