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

时间:2011-04-22 19:20:39

标签: javascript ajax json jquery

我正在尝试获取在服务器端转换为json对象的字典对象(以及正确的内容类型标题),但由于某种原因,即使我可以访问部分数据,其他部分也要在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(); 
        }
    });

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

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

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

只是一个示例json输出。那么为什么json.length不是3 ???

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

3 个答案:

答案 0 :(得分:8)

对象没有长度属性,除非你给它们一个。数组有,但数组是使用[]而不是{}创建的。

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

var count = 0;
for (var foo in bar) {
    if (bar.hasOwnProperty(foo) {
        count++;
    }
}

答案 1 :(得分:0)

调试此方法的最佳方法是检查Firebug控制台下的响应。看看你是否回复了有效的回复。

http://getfirebug.com/

答案 2 :(得分:0)

您可以使用以下内容将对象转换为JSON

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

打印长度:

alert('Length : ' + jsonVariableLength );