在AJAX不起作用的情况下部署子类别

时间:2016-02-14 作者:Danc Chan

我目前正在从事一个项目,我试图使用Ajax调用子类别内容。子类别名称将作为菜单列出,以显示其各自的内容。

我在这里找到了一个教程link, 然后开始按照步骤进行小调整。不幸的是,我没有让函数工作。单击子类别名称后,没有显示任何内容。我收到一条错误消息,说“ReferenceError:cat\\u ajax\\u get未定义”。

我相信这个错误是指下面的“index.php中的代码”。

<li id="cat-<?php echo $cat->term_id; ?>"><a class="<?php echo $cat->slug; ?> ajax" onclick="cat_ajax_get(\'<?php echo $cat->term_id; ?>\');" href="#"><?php echo $cat->name; ?></a></li>
下面是我在wordpress主题中使用的代码。

索引中的代码。php-

<nav class="category-group">
    <?php
        $categories = get_categories(array(\'child_of\' => 5));
    ?>
    <ul class="filter">
        <?php foreach($categories as $cat) { ?>
            <li id="cat-<?php echo $cat->term_id; ?>"><a class="<?php echo $cat->slug; ?> ajax" onclick="cat_ajax_get(\'<?php echo $cat->term_id; ?>\');" href="#"><?php echo $cat->name; ?></a></li>
        <?php } ?>
    </ul>
</nav>

<div id="category-post-content"></div>
JS中的代码-

jQuery(document).ready(function($){
 function cat_ajax_get(catID) {
  $(".filter a.ajax").removeClass("selected");
  $(".filter a.ajax").addClass("selected");
  var ajaxurl = \'<?php echo admin_url( "admin-ajax.php" ); ?>\';
  $.ajax({
     type: \'POST\',
     url: ajaxurl,
     data: {"action": "load-filter", cat: catID },
     success: function(response) {
         $("#category-post-content").html(response);
         return false;
   }
  });
 }
});
函数中的代码。php-

add_action( \'wp_ajax_nopriv_load-filter\', \'prefix_load_cat_posts\' );
add_action( \'wp_ajax_load-filter\', \'prefix_load_cat_posts\' );
function prefix_load_cat_posts () {
 $cat_id = $_POST[ \'cat\' ];
 $args = array (
  \'cat\' => $cat_id,
  \'posts_per_page\' => 10
 );

 $posts = get_posts( $args );
 global $post;

 ob_start ();

 foreach ( $posts as $post ) {
 setup_postdata( $post ); ?>

 <div id="post-<?php echo $post->ID; ?>" <?php post_class(); ?>>
  <div class="article">
    <div class="article__thumbnail"><?php the_post_thumbnail();?></div>
        <div class="article__content">
            <div class="article__header"><?php the_title(); ?></div>
            <div class="article__brief"><?php the_content(); ?></div>
        </div>
    </div>
  </div>

  <?php } wp_reset_postdata();

  $response = ob_get_contents();
  ob_end_clean();

  echo $response;
  die(1);
 }
就我个人而言,我怀疑函数代码一定有问题。因为我正在调用子类别内容,所以应该<;\'cat“=$cat\\u id>是其他的吗?在JS代码中,没有任何<;\'单击“”命令。如果是这样,如何添加“类”?

有人能给我一些指引或线索让奇迹发生吗?

非常感谢。

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

onclick="cat_ajax_get(...)"
在全局Javascript范围中查找函数。该行:

jQuery(document).ready(function($){
隐藏全局范围之外的所有内容。所以,这行不通。

您必须在这里使用完全不同的技术。不要设置onclick 属性而是从Javascript代码内部附加处理程序:

jQuery(document).ready(function($){
    var links = $(".filter a.ajax");
    var ajaxurl = \'<?php echo admin_url( "admin-ajax.php" ); ?>\';

    function cat_ajax_get (event) {
        var catIDText = $(event.target).parent().prop(\'id\');
        var catID = catIDText.substring(4);

        links.removeClass("selected"); // remove class from all lines
        $(event.target).addClass("selected"); // only add it back on the selected

        $.ajax({
             type: \'POST\',
             url: ajaxurl,
             data: {"action": "load-filter", cat: catID },
             success: function(response) {
                 $("#category-post-content").html(response);
                 return false;
            }
        });
    }
    links.click(cat_ajax_get);
});

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i