2010-08-17 21 views
8

Ich versuche gerade zu überprüfen, ob die Antwort, die ich bekomme, leer ist. Nun, was ich denke, funktioniert unter:Überprüfen, ob die AJAX-Antwort leer ist und andere Probleme

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

Ich denke, was ich tue, wird erreichen, was für aber ich bin mit dem Ziel, kann ich nicht scheinen, um herauszufinden, wie ich eine zweite Ausgabe, die ich tData[0] is undefined und ich versuche, Daten für etwas zu holen, das ich weiß, wird definitiv eine leere Antwort zurückgeben, so weit es mich betrifft, sollte es nicht einmal diesen Teil des Codes schlagen.

Ich bin bei ein wenig Verlust mit diesem so jede Hilfe wird sehr geschätzt.

Antwort

13

Wenn Sie in den Success-Handler Ihres $.ajax-Aufrufs fallen, erhalten Sie wahrscheinlich ein leeres Objektliteral zurück (wenn ein JSON-Datentyp zurückgegeben wird). Also du bist Null-Check ist fehlgeschlagen, weil es wirklich nicht null ist - es ist leer.

Hier ist ein Beispiel von dem, was vor sich gehen kann:

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

Im ersten Test wird die NULL-Prüfung fehlschlagen, und Sie werden eine Meldung von ‚Objekt [Objekt]‘ erhalten. Aber der zweite Test wird erfolgreich sein und Sie erhalten die Warnung "Ich bin leer".

Hier ist ein Link auf jsFiddle: http://jsfiddle.net/pcdP2/2/

$ .isEmptyObject() in jQuery 1.4 (pro jQuery API), so wird es nicht verfügbar, wenn Sie auf diese Version nicht sind.

+0

Es hat für mich funktioniert. –

+0

Vielen Dank :) –

1

Ich glaube, die Erfolgsfunktion wird ein Nicht-Null-String übergeben werden, auch wenn keine Daten zurückgegeben werden - so, Sie können für TData überprüfen müssen == ‚‘ (zusätzlich TDATA zu Überprüfung == null)

+2

In einigen Fällen schlägt der Vergleich einer Antwort auf Null fehl. '$ .isEmptyObject ($ response)' hat es geschafft. – Sobiaholic

0

Seltsamer wenn diese Situation zu begegnen fand ich, dass dieser Vergleich funktioniert:

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

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

Weder Daten oder $ .isEmptyObject (Daten) korrekt eine leere Antwort identifiziert!. Ich benutze jQuery 1.7.1.

0

Ich schlage vor, Sie wandeln das Rückgabeergebnis in einen String Validierung dann starten, bcos Ajax könnte ein certaing Datentyp zurückkommen, die u validieren kippe: Versuchen Sie, diese

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

Was für mich gearbeitet wurde:

if (data.length != 0) 
2

Trimmen der Daten für weiße Räume funktionierte für mich.

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

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