2012-06-29 3 views
1

Можно ли это сделать быстро в jQuery, прежде чем я начну их перебирать? Или мне нужно также настроить отдельную группу в ответе данных с общим счетчиком, как можно сказать .. первая переменная?Получение общего количества ответов JSON

Общий ответ выглядит примерно так:

[ 
    {"name":"Tu\u011Frul","surname":"Topuz","message":"Hello World"} 
    ,{"name":"Tu\u011Frul","surname":"Topuz","message":"Hello World"} 
] 

Но я бы использовать JQuery, чтобы вернуть 2 как общее количество (до этого я проходным их всех?) Или мне нужно сделать что-то вроде этого?

[ 
    {"total":"2"} 
    ,{"name":"Tu\u011Frul","surname":"Topuz","message":"Hello World"} 
    ,{"name":"Tu\u011Frul","surname":"Topuz","message":"Hello World"} 
] 

Каков наиболее эффективный/общий (оптимизационный) способ сделать это?

+1

Если он находится внутри переменной 'data', вы всегда можете получить доступ к его длине, используя' data.length' –

+0

. Так что мне не нужно было бы возвращать общее число в ответе? Можете ли вы опубликовать ответ с более сложным ответом? –

+0

Хорошо добавив один. –

ответ

6

Как после декодирования JSON вы получаете массив объектов (от того, что вы выложили). Вы всегда можете получить доступ к свойству length, чтобы получить общее количество.

Поскольку у вас есть этот массив, я предполагаю, что вы смогли разобрать ответ json в объект JS. Вы можете использовать dataType: 'json', чтобы сказать jQuery, чтобы сделать это автоматически для вас, или вы можете сами проанализировать это, используя jQuery.parseJSON(), но это необходимо, если вы установите dataType:'json' или установите content-Type заголовок на application/json с сервера.

Таким образом, вы можете сделать что-то вроде этого

$.ajax({ 
     .... 
     dataType: 'json', 
     success(function(data){ 
     if(data){ 
      var total = data.length; 
     } 
     } 
}); 

Так что вам не нужно, чтобы отправить total count обратно с сервера. Вы можете получить это с помощью JS после получения ответа, и это облегчит вам переход этого ответа с использованием $.each, так как весь массив содержит объекты такого же типа (у него нет специального члена {"total":"2"}).

Примечание:length свойство Pure ваниль JS, она не имеет ничего общего с jQuery.

+0

Хорошо, я понял. Спасибо. –

1

В javascript вы не манипулируете JSON (который является стандартом обмена данными), а javascript-объектами.

Вы обычно получаете этот объект с помощью

var data = JSON.parse(mystring) 

или просто потому, что ваш data является аргументом функции успеха JQuery Ajax вызова:

$.ajax(
     .... 
     dataType:'json', 
     success(function(data){ 
     }) 

После разобранного, что у вас есть это объект javascript.

В вашем случае это массив, так что вы можете сделать стандартные манипуляции:

var length = data.length; 
var secondObject = data[1]; 
var firstObjectName = data[0].name; 
///etc. 
+0

ну, я думаю, я мог быть педантичным, но я не думаю о json как формате кодирования. Я рассматриваю такие вещи, как ascii, utf-8 как форматы кодирования. JSON больше похожа на файл CSV, так что обмен данными лучше imho – NimChimpsky

+0

+1 для дополнительной полезной информации. Благодаря! –

Смежные вопросы