从ajax返回数据时不工作data.length

时间:2013-05-28 14:33:36

标签: jquery ajax

我试图用jQuery中的ajax获取json类型的一些数据,所以我写了这段代码:

$.ajax({
    url: link.attr('href'),
    type: 'post',
    data: 'post=true',
    dataType: 'json',
    success: function(data){
        if (data.length > 0) {
            ldLayer.fadeOut('slow');
        }else{
            alert('no data');
        }
    }
});

但当datanull时,if将为真且ldLayer.fadeOut('slow');将会运行!

更新 console.log(data)结果为:[null]

2 个答案:

答案 0 :(得分:3)

你得到了一系列结果。在您描述的问题案例中,您将获得一个包含单个null元素的数组。空数组([])的长度为0,但是具有单个空元素([null])的数组的长度为1。

在客户端中,您可以检查数组的任何元素是否为非null

success: function(data){
    var foundSomething = false;

    for(var i=0; i<data.length; ++i) {
        if(data[i] !== null) foundSomething = true;
        break;
    }

    if(foundSomething) {
        ldLayer.fadeOut('slow');
    }else{
        alert('no data');
    }
}

然而,更好的方法是修复服务器端代码,使其不会发送带有null元素的数组。但是,如果您无法控制服务器代码,我上面提供的客户端解决方案是您最好的选择。

答案 1 :(得分:2)

只需像这样检查

if (data)   {
    ldLayer.fadeOut('slow');
} else {
    alert('no data');
}