Как отобразить данные в формате JSON через JQuery?

0

У меня уже есть текстовое поле jquery autocomplete, которое правильно отображает данные, но когда я добавляю $ group в запрос MongoDB, чтобы сделать выделение, я получаю требуемый json-массив в качестве ответа, но в текстовом виде автозаполнения ничего не отображается,

Ниже приведен мой результат запроса и ответ массива json на странице обработки

Мой первый запрос (Auto complete заполняется отлично)

$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);

                    }


                });

                    }


                });



              });

если моя догадка верна, я получаю мультимассив в качестве второго результата, и результат не отображается в автозаполнении, но почему? Пожалуйста, помогите, должно быть что-то о группировке

  • 0
    Похоже на плагин. Какой это, у вас есть ссылка на то, что вы используете? Казалось бы, данные в виде простого массива не соответствуют ожиданиям. Вам, вероятно, нужно немного помассировать свой результат, прежде чем вернуться.
  • 0
    Вы также, кажется, пытаетесь добавить скриншот. Нет скриншотов, пожалуйста, это не поможет ответить на проблему
Показать ещё 3 комментария

1 ответ

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 значение _id в конце результата "group". И вы действительно хотите разбить объекты как простые строки для возвращаемого результата.

Затем вы просто перебираете массив php:

  $myresult = array();

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

  json_encode( $myresult );

Итак, у вас просто есть массив строк, как требуется модулю plugin:

["Imagination","Inspirational"]

Дело в том, что метод плагина, включенный в API jqueryui, ожидает, что результаты будут просто массивом строк. Вы возвращаете объекты с неожиданными ключами, если только вы не манипулируете им.

  • 0
    тогда почему мой первый запрос с моим первым массивом json сработал?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню