JQuery AJAX JSON ответ имеет неопределенную длину и неверные данные - PullRequest
2 голосов
/ 22 апреля 2011

Я пытаюсь получить объект словаря, который преобразуется в объект json на стороне сервера (вместе с правильным заголовком типа содержимого), но по какой-то причине, хотя я могу получить доступ к части данных, другие части не и json объект в jquery имеет длину, равную 0.

Вот мой вызов jquery:

$.ajax({
        type : "POST",
        url : cl._url,
        //data : 'text='+text,  
  data: "{}",
  contentType: "application/json; charset=utf-8",
        dataType : "json",
        error : function(XHR, status, error) {
            alert("There was an error processing the request.\n\n"+XHR.responseText);
        },
        success : function(json){
            if (!json.length) {
                alert('There are no incorrectly spelled words...'+json[0]+ '  ' + json.length);
            } else {
                // highlight bad words
            }
            cl.$container.html(html);   
            // execute callback function, if any
            (callback != undefined) && callback(); 
        }
    });

Я обычно получаю окно с этим кодом, и json [0] выводит 99, как и ожидалось. Но json.length не определен. Таким образом, в некотором смысле возвращенный json верен, но мой код не обнаружит его и не будет его использовать.

Когда я перехожу прямо на свою страницу Ashx, где мои данные JSON печатаются на экране, я получаю этот объект JSON:

{"id":1,"json":[5,10,15,20],"0":"99"}

Просто пример вывода JSON. Так почему же json.length не равен 3 ???

ОБНОВЛЕНИЕ: поэтому я изменил свой код asp.net с словаря на список, а затем добавил те же значения. И вдруг длина функционирует сейчас. ?!?!?! То есть объекты не имеют длины в javascript?

Ответы [ 3 ]

8 голосов
/ 22 апреля 2011

Объекты не имеют свойства длины, если вы не дадите им одно.Массивы делают, но массивы создаются с [], а не {}.

Если вы хотите узнать, сколько свойств имеет объект, вы должны зациклить их и сосчитать их:

var count = 0;
for (var foo in bar) {
    if (bar.hasOwnProperty(foo) {
        count++;
    }
}
0 голосов
/ 13 апреля 2016

Вы можете преобразовать свой объект в JSON, используя:

var jsonVariable= JSON.stringify(objectVariable);
var jsonVariableLength = jsonVariable.length ;

И выведите длину:

alert('Length : ' + jsonVariableLength );
0 голосов
/ 22 апреля 2011

Лучший способ отладить это - проверить ответ в консоли Firebug. Посмотрите, получите ли вы верный ответ.

http://getfirebug.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...