代码之家  ›  专栏  ›  技术社区  ›  LiamGu

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

  •  8
  • LiamGu  · 技术社区  · 14 年前

    我正在尝试检查我得到的响应是否为空。现在我认为会起作用的是:

     $.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 回复  |  直到 10 年前
        1
  •  14
  •   David Hoerster    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()位于jQuery1.4中(根据jQuery API),因此如果您不在该版本上,它将不可用。

        2
  •  6
  •   user984003    11 年前

    对我有用的是:

    if ( data.length != 0 )
    
        3
  •  2
  •   Mukesh    11 年前

    修剪空白区域的数据对我很有用。

    jQuery.get(url,{parameters},function(data){
    data=data.trim();                       
    
            if (data) {                     
                   alert('Data available')
            } else {                         
                 alert('Empty')
            }                       
    });
    
        4
  •  1
  •   Ed Schembor    14 年前

    我相信success函数将传递一个非空字符串,即使没有返回任何数据-因此,您可能需要检查tdata=''(除了检查tdata==null之外)

        5
  •  0
  •   jeffday    12 年前

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

    $.ajax({url:'a url',
    dataType:'html',
    success: foo
    });
    
    function foo(data) {
      if (data && data != " ") {
        console.log("response was empty");
      }
    }
    

    都不!数据或$.IsEmptyObject(数据)正确标识了空白响应。我正在使用jquery 1.7.1。

        6
  •  0
  •   Africa Matji    12 年前

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

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