我正在尝试获取在服务器端转换为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中的对象没有长度?
答案 0 :(得分:8)
对象没有长度属性,除非你给它们一个。数组有,但数组是使用[]
而不是{}
创建的。
如果你想知道一个对象有多少属性,你必须循环它们并计算它们:
var count = 0;
for (var foo in bar) {
if (bar.hasOwnProperty(foo) {
count++;
}
}
答案 1 :(得分:0)
调试此方法的最佳方法是检查Firebug控制台下的响应。看看你是否回复了有效的回复。
答案 2 :(得分:0)
您可以使用以下内容将对象转换为JSON
var jsonVariable= JSON.stringify(objectVariable);
var jsonVariableLength = jsonVariable.length ;
打印长度:
alert('Length : ' + jsonVariableLength );