2010-08-17 14 views
8

Attualmente sto cercando di verificare se la risposta che sto ottenendo è vuota. Ora quello che penso funzionerà è qui sotto:Controllo per vedere se la risposta AJAX è vuota e altri problemi

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

Penso che quello che sto facendo raggiungerà quello che sto puntando però, non riesco a scoprire quando sto avendo un secondo numero di tData[0] is undefined e sto cercando di recuperare i dati per qualcosa che so sicuramente restituirà una risposta vuota, quindi per quanto mi riguarda, non dovrebbe nemmeno colpire quella parte del codice.

Sono un po 'in perdita con questo così ogni aiuto è molto apprezzato.

risposta

13

Se si sta inserendo nel gestore di successo della vostra chiamata $.ajax, probabilmente otterrete un valore letterale dell'oggetto vuoto (se viene restituito un dataType JSON). Quindi il controllo null fallisce perché in realtà non è nullo: è vuoto.

Ecco un esempio di ciò che può essere in corso:

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

Nel primo test, il controllo nullo fallirà e si otterrà un avviso di 'oggetto [oggetto]'. Ma il secondo test avrà successo e riceverai l'avviso "I am empty".

Ecco un link ad esso su jsFiddle: http://jsfiddle.net/pcdP2/2/

$ .isEmptyObject() è in jQuery 1.4 (per l'API di jQuery), quindi non sarà disponibile se non sei su tale versione.

+0

Ha funzionato per me. –

+0

Grazie mille :) –

1

credo che la funzione di successo sarà passata una stringa non nulla, anche quando viene restituiti dati - quindi, potrebbe essere necessario verificare la presenza di tData == '' (oltre a controllare tData == null)

+2

In alcuni casi, il confronto tra una risposta e l'altro non riesce. '$ .isEmptyObject ($ response)' ha fatto il trucco. – Sobiaholic

0

Stranamente quando incontrano questa situazione ho trovato che questo confronto funziona:

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

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

Né dati o $ .isEmptyObject (i dati) ha identificato una risposta vuota correttamente!. Sto usando jQuery 1.7.1.

0

ti suggerisco di convertire il risultato di ritorno in una stringa quindi avviare la convalida, bcos ajax potrebbe essere restituisce un tipo di dati certaing che u cant convalidare: Prova questa

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

Che cosa ha funzionato per me era:

if (data.length != 0) 
2

Ritaglio dei dati per gli spazi bianchi lavorati per me.

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

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