Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jquery ajax json length 
:(
    Опции темы
Muchenik
Дата 13.1.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



Доброго времени суток. Прошу подсказки.
Проблема с получением размера объекта, который получается через Ajax. 

есть код
Код

    jQuery.ajax({
        type: "POST",
        url: "index.php?p=action",
        dataType: 'json',
        cache: false,
        success: function(ret) {
            alert(ret.data.length);
            jQuery.each(ret.data, function(key, value) {
                    alert(key + ' ' + value);
            });
    });


Скрипт получает массив в json вида  {"data":{"236":"1109"},"uid":"972"}

Проблема заключается в том, что не определяется размер массива ret.data (размер ret также не определяется) и код
Код

alert(ret.data.length);


выводит undefined

, хотя  код ниже
Код

            jQuery.each(ret.data, function(key, value) {
                    alert(key + ' ' + value);
            });


отрабатывает правильно и выводит все элементы.

В заголовки отправляется Content-Type: text/html; charset=utf-8

при выводе alert(ret.data) выводит [object Object]

Спасибо.





PM MAIL ICQ   Вверх
IDVsbruck
Дата 14.1.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Непонятно что ты не понял и что у тебя не получается.
В запросе ты задал dataType="json", это значит, что на выходе ты получишь объект. Какой может быть размер у объекта???
Если надо сначала получить размер получаемой строки, то задавай тип как текст, замеряй размер, а потом eval("(" + ... + ")"). Но нужно ли оно?
Или внеси изменение в библиотеку jQuery, чтобы до конвертации ответа в объект заносило ее размер в поле.
PM MAIL   Вверх
Muchenik
Дата 15.1.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



На входе я раскладываю массив в json.

"Какой может быть размер у объекта???" - jquery умеет получать размер объекта
Код

$("#div").size();
$("#div").length;


или даже с json вот так все работает

Код

var tmp;
$.getJSON("json.txt", function(json) {
                tmp = eval(json);
});
alert(tmp.length);


Т.е. мне нужно получить размер моего исходного массива. IDVsbruck, тебе понятно???
PM MAIL ICQ   Вверх
IDVsbruck
Дата 15.1.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Конечно! smile Была сначала мысль, что, возможно, ты хочешь получить количество элементов объекта, но увидел, что с сервера ты отправляешь не массив, а объект ... Размер свойством length можно получить только у перечесляемых объектов, а простой объект (Object) таковым не является.
Если же хочется воспользоваться jQuery, то и тут "засада": и size(), и length определяют размер у jQuery-объектов, к коим простой Object не относится.

Так что совет - если ты все-таки отсылаешь с сервера массив, то делать это надо корректно, если все-таки объект с набором полей, то таки прийдется использовать цикл для обхода всех полей для получения их количества.
PM MAIL   Вверх
12345c
Дата 15.1.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 3
Всего: 101



IDVsbruck, он хеш массивом называет, ему надо получить длину сериализованного хеша: ).

Muchenik, смотрите в jQuery:
Код

            // Get the JavaScript object, if JSON is used.
            if ( type == "json" )
                data = window["eval"]("(" + data + ")");
        }
 - это то, чем отличеает метод приёма json от text. Ничто не мешает получить данные с типом text
, измерить длину, а потом выполнить указанную строчку, чтобы получить json.


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
IDVsbruck
Дата 16.1.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Цитата(12345c @  15.1.2010,  20:05 Найти цитируемый пост)
Ничто не мешает получить данные с типом text
, измерить длину

Ха, ты на ту же удочку попался ... это ему не надо.

А сериализованный хеш или просто json-объект - как его не назови - это в любом случае не перечисляемый тип и одной функцией длину не получшь - надо пробегать по нему для поиска длины.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.