检查AJAX响应是否为空以及其他问题

时间:2010-08-17 13:40:40

标签: jquery ajax

我目前正在尝试检查我得到的回复是否为空。现在我认为可行的是:

 $.ajax({
            type: 'GET',
            url: '<%=Url.Action("FindTransaction", "Calls") %>',
            data:
            { companyID: $('#CompanyDDL').val(),
                storeID: storeNo,
                tranDate: $('#TranDate').val(),
                tranNum: $('#TranNum').val()
            },
            success: function (tData) {
                if (tData == null) {
                     $('#tranNotFound').show("blind", options, 500);
                 } else {
                     $('#products').html('');
                     $('#SKUs').html('');
                     $('#price').html('');
                    for (var i = 0; i < tData.length; i++) {
                        $('#SKUs').append(!tData ? '' : tData[i].SKUN + '<br />');
                        $('#products').append(!tData ? '' : tData[i].DESCR + '<br />');
                        $('#price').append(!tData ? '' : tData[i].EXTP + '<br />');
                    }
                    $('#till').html(!tData ? '' : tData[0].TILL);
                    $('#tran').html(!tData ? '' : tData[0].TRAN);
                    $('#cashier').html(!tData ? '' : tData[0].CashierName);
                    $('#total').html(!tData ? '' : tData[0].TOTL);
                    $('#fullTransactionDetails').show("blind", options, 500);
                }
            }
        });

我认为我正在做的事情将实现我的目标,但我似乎无法找到,因为我有第二期tData[0] is undefined并且我正在尝试获取数据对于我知道肯定会返回空响​​应的内容,所以就我而言,它甚至不应该触及代码的那一部分。

我对此感到有点失落,所以非常感谢任何帮助。

6 个答案:

答案 0 :(得分:14)

如果你正在进入$.ajax调用的成功处理程序,你可能会得到一个空的对象文字(如果它是一个返回的JSON数据类型)。所以你的空检查是失败的,因为它确实不是空的 - 它是空的。

以下是可能发生的事情的样本:

$(document).ready(function() {
    var x = {};
    if (x==null) {
        alert("I am null");
    } else {
        alert(x);
    }

    if ($.isEmptyObject(x)) {
        alert("I am empty");
    } else {
        alert(x);
    }
});

在第一次测试中,空检查将失败,您将收到'object [Object]'的警报。但是第二次测试会成功,你会得到'我是空的'警告。

以下是jsFiddle上的链接:http://jsfiddle.net/pcdP2/2/

$。isEmptyObject()在jQuery 1.4中(根据jQuery API),因此如果您不在该版本上,它将无法使用。

答案 1 :(得分:6)

对我有用的是:

if ( data.length != 0 )

答案 2 :(得分:2)

修剪白色空间的数据对我有用。

jQuery.get(url,{parameters},function(data){
data=data.trim();                       

        if (data) {                     
               alert('Data available')
        } else {                         
             alert('Empty')
        }                       
});

答案 3 :(得分:1)

我相信成功函数将被传递一个非空字符串,即使没有返回数据 - 所以,你可能需要检查tData ==''(除了检查tData == null)

答案 4 :(得分:0)

奇怪的是,当遇到这种情况时,我发现这种比较有效:

$.ajax({url:'a url',
dataType:'html',
success: foo
});

function foo(data) {
  if (data && data != " ") {
    console.log("response was empty");
  }
}

数据或$ .isEmptyObject(数据)都没有正确识别出空白响应。我使用的是jQuery 1.7.1。

答案 5 :(得分:0)

我建议您将返回结果转换为字符串然后开始验证,bcos ajax可能会返回您无法验证的certaing数据类型: 试试这个

succes:function(resultvalue)
     {
         var result = resultvalue.toString();
     if(result=='')
     {
        alert('the result is empty'); 
     }
     else
     {
                alert('the result is not empty'); 
     }
     }