代码之家  ›  专栏  ›  技术社区  ›  Derek Adair

这个对象是空的吗,javascript

  •  4
  • Derek Adair  · 技术社区  · 15 年前

    我建立了一个Ajax系统。当mysql查询没有返回数据时,我需要它返回一个空对象。我在PHP脚本中创建了一个名为“data”的节点,即使查询没有返回任何数据,我也会传递$data['success']=1。

    诀窍是我不知道如何检查查询是否返回数据。

    我试过…

    // sub responseObj.data for responseObj.data[0] for the following if's
    if(responseObj.data[0].length == -1)  
    
    if(responseObj.data[0] == null)
    
    if(responseObj == undefined)
    //edit: added this...
    if(!responseObj.data[0])
    

    我真的失去了我尝试过的其他各种片段的风格。

    编辑:添加传递给我的脚本的生成的XML
    XML-返回零个结果

    <response_myCallbackFunction>  
      <success>1</success>  
    <response_myCallbackFunction>
    

    XML-返回填充的查询

    <response_myCallbackFunction>  
      <data> 
      <random_data>this is data</random_data>  
      </data>  
      <success>1</success>  
    <response_myCallbackFunction>
    

    是否有方法检查javascript中的对象是否为空?

    -谢谢

    5 回复  |  直到 14 年前
        1
  •  8
  •   Derek Adair    14 年前

    Obj.hasOwnProperty('blah') 似乎无法检查属性是否存在。

    function isEmptyObj(obj){
      for(var i in obj){
        return false;
      }
      return true;
    }
    
    isEmptyObj({a:1}); //returns true
    
    isEmptyObj({}); //returns false
    
        2
  •  3
  •   Chris Frederick    14 年前

    你可以试试

    if( responseObj["data"] ) {
       // do stuff with data
    }
    

    if( responseObj.hasOwnProperty("data") && responseObj.data ) {
       // do stuff with data
    }
    
        3
  •  1
  •   zincorp    15 年前
    if(typeof responseObj.data != 'undefined') {
       // code goes here
    }
    
        4
  •  1
  •   vsync    14 年前

    对于ES5,您有 getOwnPropertyNames 以下内容:

    var o = { a:1, b:2, c:3 };
    Object.getOwnPropertyNames(o).length // 3
    
        5
  •  0
  •   NickFitz    15 年前

    如果 responseObj 是XML文档对象(来自 xhr.responseXML 属性),然后:

    if (responseObj.getElementsByTagName("data").length > 0) {
        // do stuff...
    }
    

    如果 响应对象 是一个javascript对象:

    if (responseObj.data) {
        // do stuff...
    }