如何在js或jQuery中获取长度字符串json

时间:2012-04-03 06:33:02

标签: javascript jquery json jqgrid

我有这段代码,

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

请帮助我,谢谢

4 个答案:

答案 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){

     

检查与键相关的一些属性

     

}