我有这段代码,
buildSelect: function (data) {
var response = $.parseJSON(data);
alert(response.length);
var s = "<select>";
if (response && response.length) {
for (var i = 0, l = response.length; i < l; i++) {
var ri = response[i];
s += '<option value="' + ri.CUSTOMS_ID + '">'
+ ri.CUSTOMS_NAME + '</option>';
}
}
return s + "</select>";
}
},
我希望检查响应不为空或空并获得长度我写这段代码response.length
但是返回undifine
和数据返回
{"rows":[{"id":1,"cell":["1","بندرامام خميني","IMAM KHOMEINI PORT","True",null]},{"id":2,"cell":["2","آبادان","ABADAN","True",null]},{"id":3,"cell":["3","خرمشهر","KHORRAMSHAHR","True",null]},{"id":4,"cell":["4","بندرعباس","BANDAR ABBAS","True",null]},{"id":5,"cell":["5","بوشهر","BUSHEHR","True",null]},{"id":6,"cell":["6","تهران","TEHRAN","True",null]},{"id":7,"cell":["7","شيراز","SHIRAZ","True",null]},{"id":8,"cell":["8","دبي","DUBAI","True",null]}],"Page":0,"Total":0,"Records":0}
我想如果Rows不为空,则所有子项添加到DropDownlist
请帮助我,谢谢
答案 0 :(得分:2)
问题是response
没有length
属性。但是,response.rows
作为Array
执行:
var response = $.parseJSON(data);
alert(response.rows.length);
然后,您可以保存对response.rows
的引用并继续使用该引用:
var rows = response.rows;
alert(rows.length);
var s = "<select>";
if (rows && rows.length) {
for (var i = 0, l = rows.length; i < l; i++) {
var ri = rows[i];
s += '<option value="' + ri.id + '">' + ri.cell[1] + '</option>';
}
}
return s + "</select>";
答案 1 :(得分:1)
$.parseJSON(data)
返回JavaScript对象而不是字符串。您不能在对象上使用长度。根据{{3}} $.parseJSON
,如果您没有传入任何内容,空字符串,null或未定义,则返回null。
UPD:
在您的特定情况下,检查response
不是null
就足够了(不需要检查长度)。如果数据不是有效的JSON,那么$.parseJSON(data)
将通过异常。你可能也想抓住它。
答案 2 :(得分:1)
解析完JSON字符串后,在这种情况下,您将获得var response
中的对象。 JavaScript对象没有length属性。如果您只想检查空值或空值,请执行以下一项或多项操作。
var data = "";//in case of null data
if(!data){
//do something
}
//or
if(data === ''){
//do something
}
现在,如果您想检查rows
是否为空,
var data = {
rows:{}
};//assuming an empty rows object
if($.isEmptyObject(data.rows)){
//do something
}
答案 3 :(得分:1)
由于object不包含length属性/方法,因此对象的长度没有任何意义。您可以为每个对象分配方法和属性,预先编写或自定义。
在您的情况下,尝试搜索对象数据/属性,例如
for(key in response){
检查与键相关的一些属性
}