select2搜索json结果不起作用

时间:2015-07-22 20:25:58

标签: json wordpress jquery-select2

我几个小时以来一直在寻找这个问题的答案,但是没有发现任何与我的情况有关的事情。

我的设置: 我创建了一个自定义TinyMCE按钮,其中包含一个WordPress主题的弹出窗口,允许用户从下拉列表中选择自定义帖子类型的帖子(在本例中为“客户评论”),然后将其ID插入到短代码中。由于这个主题将运行的网站有超过1,000条评论,我认为json编码下拉列表的数据会更好,然后使用select2搜索有限结果列表(分页结果)并保留整个事物从炸毁。所有这一切都成功,除了2项:

  1. json编码数据显示,但是当我输入搜索词时,select2下拉列表会显示所有带有第一个选中的评论的列表。即使搜索到的文本在列表中

  2. ,它也找不到结果
  3. 从上面开始,一旦我输入一个搜索词,select2就会显示所有结果,而不仅仅是10,或者我设置的任何限制。

  4. 以下是我对json编码数据的方法(在一个名为bpl_content.php的文件中):

        var centuries =  [
          [],[],[],[],[]
        ];
    
    
        ancestry.forEach(function(person) {
          var centuryOfDeath =(Math.ceil(person.died /100));
          var centuryArray =(centuryOfDeath - 16);
          centuries[centuryArray].push(person); //Here I am trying to access an element in an array using a variable. I know this doesn't work, but is there a way to make it work?
    
    
    });
    

    返回

    $args       = array('post_type' => 'customer_reviews', 'posts_per_page' => -1, 'fields' => 'ids');
    $posts      = get_posts($args);
    
    if( $posts ) :
    
        $reviews = array();
    
        foreach( $posts as $post ) : setup_postdata( $post );
    
            $title  = get_the_title();
            $the_ID = get_the_ID();
    
            $reviews[] = array (
                'id'    => $the_ID,
                'text'  => $title
            );
    
        endforeach;
    
    endif;
    
    echo json_encode( $reviews )
    

    (有超过800件商品退货,所以上面只显示了2件,但你明白了)

    以下是我用来获取我的< select>的javascript菜单填充了json数据:

    [{"id":12286,"text":"John Doe"},{"id":12285,"text":"Jane Doe"},...]
    

    我不能为我的生活找出为什么一切正常,除了搜索和分页。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您的服务器端代码中似乎没有任何代码可用于过滤和分页结果。 Select2意识到在服务器端完成此任务更有效,并期望开发人员在那里实现它。搜索字词将以q传递,页面将以page传递(如果可用)。

如果您不想在服务器端实现搜索和分页,或者只有一个返回所有结果的端点,您仍然可以解决它。您只需将JSON结果初始化为Select data而不是使用AJAX功能。

$.ajax({
  url: "_bpl_content/bpl_content.php",
  type: 'POST',
  contentType: 'application/json; charset=utf-8'
}).then(function (response) {
  $(".js-data-example-ajax").select2({
    placeholder: "Select a Review",
    minimumInputLength: 3,
    data: response
  });  
});