如何通过jquery显示json编码数据?

时间:2014-05-28 07:07:57

标签: javascript php jquery json mongodb

我已经有了一个正确显示数据的jquery自动完成文本框,但是当我在MongoDB查询中添加$ group以执行select distinct时,我收到所需的json数组作为响应,但在自动完成文本视图中没有显示任何内容,

以下是我的请求结果和来自处理页面的json数组响应

我的第一个查询(自动完成填充完整)

$result = $collection->aggregate(array(
array(
'$match' => array(

  'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
    'Name_Status' => "P",
    'Quote_Details.Quote_Status' => "p"

 )
),
 array(
'$unwind' => '$Quote_Details'
 ),
        array(
'$match' => array(

  'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
    'Name_Status' => "P",
    'Quote_Details.Quote_Status' => "p"


  )
   ),


       array(
    '$group' => array(
        '_id' => array(
            'value1' =>'$Quote_Details.Quote_Catagory'

        )
        ) 

    ),   





  array(
  '$project' => array(

 'value' => '$Quote_Details.Quote_Catagory'
   )      
   ), 



  ));

json结果

[{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Inspirational"},{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Inspirational"},{"_id":{"$id":"538443bf05a7d1226d000000"},"value":"Imagination"}]

新查询(自动填充正在填充,但没有显示任何内容)

$result = $collection->aggregate(array(
 array(
'$match' => array(

  'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
    'Name_Status' => "P",
    'Quote_Details.Quote_Status' => "p"

)
),
 array(
'$unwind' => '$Quote_Details'
 ),
        array(
   '$match' => array(

  'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
    'Name_Status' => "P",
    'Quote_Details.Quote_Status' => "p"


   )
 ),




 array(
    '$group' => array(
        '_id' => array(
            'value1' =>'$Quote_Details.Quote_Catagory'

        )
        )
       ), 

      ));

结果json

[{"_id":{"value1":"Imagination"}},{"_id":{"value1":"Inspirational"}}]

我的Jquery

$(document).ready(function(){

                $("#catagr_id").autocomplete({
                    source:'insertionauto.php',
                    minLength:1,
                    select: function (event, ui) 
                    {
                         //label = ui.item.label;
                        var value1 = ui.item.value;
                        $("#authnames").val(value);
                        console.log("hi");

                        //alert(label);
                        //alert(value);

                        $("#quote_id").autocomplete({
                    source:'autocatagquote.php?postcode='+value1,
                    minLength:1,
                    select: function (event, ui) 
                    {
                        var label1 = ui.item.label;
                        var value1= ui.item.value;

                        console.log("hi");

                        //alert(label);
                        //alert(value);

                    }


                });

                    }


                });



              });

如果我的猜测是正确的我得到一个多数组作为第二个结果并且结果没有显示在自动完成中,但为什么?请帮忙,必须有关于分组的内容

1 个答案:

答案 0 :(得分:0)

所以真的要使用“jqueryui”自动完成方法,该方法需要一个简单的字符串数组作为数据源。但是让我们首先清理你的聚合语句,因为那里有一些不必要的东西没有帮助:

$result = $collection->aggregate(array(
    array(
       '$match' => array(
           'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
           'Name_Status' => "P",
           'Quote_Details.Quote_Status' => "p"
       )
    ),
    array(
        '$unwind' => '$Quote_Details'
    ),
    array(
        '$match' => array(
            'Quote_Details.Quote_Catagory' => new MongoRegex("/^$q/i"),
            'Name_Status' => "P",
            'Quote_Details.Quote_Status' => "p"
        )
    ),
    array(
        '$group' => array(
            '_id' => '$Quote_Details.Quote_Catagory'
        )
    ),
));

因此没有理由将_id值嵌套在结尾“组”结果中。实际上,您希望将对象作为返回结果的纯字符串去除。

然后你只是循环遍历php数组:

  $myresult = array();

  for ( $i = 0; $i < sizeof( $result ); $i++ ) {
      $myresult[$i] = $result["result"][$i]["_id"];
  }

  json_encode( $myresult );

那么你只需要一个插件方法所需的字符串数组:

["Imagination","Inspirational"]

关键是jqueryui API中包含的插件方法要求结果只是一个字符串数组。除非先操作它,否则返回具有意外键的对象。