2010-08-17 21 views
8

Tôi hiện đang cố gắng kiểm tra xem phản hồi tôi nhận được có trống không. Bây giờ những gì tôi nghĩ rằng sẽ làm việc là dưới đây:Kiểm tra xem phản hồi AJAX có trống không và các sự cố khác

$.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); 
       } 
      } 
     }); 

Tôi nghĩ rằng những gì tôi đang làm sẽ đạt được những gì tôi đang hướng tới tuy nhiên, tôi dường như không thể tìm ra là tôi đang gặp vấn đề thứ hai tData[0] is undefined và tôi đang cố gắng tìm nạp dữ liệu cho thứ gì đó mà tôi biết chắc chắn sẽ trả về một phản hồi trống rỗng, cho đến khi tôi quan tâm, nó thậm chí không nên nhấn vào phần đó của mã.

Tôi đang ở một chút mất mát với điều này để mọi trợ giúp được đánh giá cao.

Trả lời

13

Nếu bạn rơi vào trình xử lý thành công của cuộc gọi $.ajax, có thể bạn sẽ nhận được một đối tượng trống trở lại (nếu đó là kiểu dữ liệu JSON được trả lại). Vì vậy, bạn đang kiểm tra null là không vì nó thực sự không phải là null - nó trống rỗng.

Dưới đây là một ví dụ về những gì có thể xảy ra:

$(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); 
    } 
}); 

Trong thử nghiệm đầu tiên, việc kiểm tra null sẽ thất bại và bạn sẽ nhận được một cảnh báo của 'đối tượng [Object]'. Nhưng thử nghiệm thứ hai sẽ thành công và bạn sẽ nhận được cảnh báo 'Tôi trống'.

Dưới đây là một liên kết đến nó trên jsFiddle: http://jsfiddle.net/pcdP2/2/

$ .isEmptyObject() là trong jQuery 1,4 (mỗi API jQuery), vì vậy nó sẽ không có sẵn nếu bạn không có trên phiên bản đó.

+0

Nó làm việc cho tôi. –

+0

Cảm ơn rất nhiều :) –

1

Tôi tin rằng hàm thành công sẽ được chuyển qua một chuỗi không null, ngay cả khi không có dữ liệu được trả về - vì vậy, bạn có thể cần kiểm tra tData == '' (ngoài việc kiểm tra tData == null)

+2

Trong một số trường hợp, việc so sánh phản hồi với lỗi không thành công. '$ .isEmptyObject ($ response)' đã làm thủ thuật. – Sobiaholic

0

Lạ lùng thay khi gặp phải tình huống này, tôi phát hiện ra rằng sự so sánh này hoạt động:

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

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

Cả dữ liệu hoặc $ .isEmptyObject (dữ liệu) đã xác định một phản ứng trống chính xác!. Tôi đang sử dụng jQuery 1.7.1.

0

tôi đề nghị bạn chuyển đổi các kết quả trở lại vào một chuỗi sau đó bắt đầu xác nhận, bcos ajax có thể được trả lại một datatype certaing rằng u cant xác nhận: Hãy thử điều này

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

gì làm việc cho tôi là:

if (data.length != 0) 
2

Cắt bớt dữ liệu cho khoảng trắng làm việc cho tôi.

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

     if (data) {      
       alert('Data available') 
     } else {       
      alert('Empty') 
     }      
}); 
Các vấn đề liên quan