jQuery ajax json响应的长度未定义且数据不正确

Dex*_*ter 2 javascript ajax jquery json

我正在尝试获取一个字典对象,该对象在服务器端转换为json对象(以及正确的内容类型标题),但由于某种原因,即使我可以访问部分数据,其他部分也不显示up和jquery中的json对象的长度等于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(); 
        }
    });
Run Code Online (Sandbox Code Playgroud)

我通常会使用此代码获取警报框,并且json [0]按预期打印出99.但是json.length是"未定义的".所以在某种意义上,json返回是正确的,但我的代码不会检测它并使用它.

当我直接进入我的ashx页面,我的json数据被打印在屏幕上时,我得到了这个json对象:

{"id":1,"json":[5,10,15,20],"0":"99"}
Run Code Online (Sandbox Code Playgroud)

只是一个示例json输出.那怎么来json.length不是3 ???

更新:所以我改变了我的asp.net代码,从Dictionary到List,然后添加了相同的值.突然间,长度现在正在发挥作用.?!?!?!所以对象在javascript中没有长度?

Que*_*tin 8

对象没有长度属性,除非您给它们一个.数组有,但数组是[]没有创建的{}.

如果你想知道一个对象有多少属性,你必须循环它们并计算它们:

var count = 0;
for (var foo in bar) {
    if (bar.hasOwnProperty(foo) {
        count++;
    }
}
Run Code Online (Sandbox Code Playgroud)