2010-08-17 62 views
8

Actualmente estoy tratando de verificar si la respuesta que recibo está vacía. Ahora lo que creo que va a funcionar es el siguiente:Verificando si la respuesta AJAX está vacía y otros problemas

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

creo que lo que estoy haciendo va a lograr lo que estoy apuntando sin embargo, me parece que no puede averiguar lo que estoy teniendo un segundo número de tData[0] is undefined y estoy tratando de obtener datos para algo que sé definitivamente devolverá una respuesta vacía, por lo que a mí respecta, ni siquiera debería golpear esa parte del código.

Estoy un poco perdido con esto, así que cualquier ayuda es muy apreciada.

Respuesta

13

Si está cayendo en el controlador de éxito de su llamada $.ajax, es probable que esté recuperando un literal de objeto vacío (si se devuelve un tipo de datos JSON). Por lo tanto, su comprobación nula está fallando porque realmente no es nula: está vacía.

He aquí una muestra de lo que puede estar pasando:

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

En la primera prueba, el cheque nulo fallará y obtendrá una alerta de 'objeto [objeto]'. Pero la segunda prueba tendrá éxito y obtendrá la alerta 'Estoy vacío'.

Aquí hay un enlace a ella en jsFiddle: http://jsfiddle.net/pcdP2/2/

$ .isEmptyObject() está en jQuery 1.4 (por la API de jQuery), por lo que no estará disponible si no estás en esa versión.

+0

Me funcionó. –

+0

Muchas gracias :) –

1

creo que la función del éxito se le pasará una cadena no nula, incluso cuando no se devuelven datos - es así, puede que tenga que comprobar si hay TData == '' (además de comprobar TData == null)

+2

En algunos casos falla la comparación de una respuesta a nulo. '$ .isEmptyObject ($ response)' hizo el truco. – Sobiaholic

0

Curiosamente cuando se enfrentan a esta situación me encontré con que trabaja esta comparación:

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

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

Ni los datos o $ .isEmptyObject (datos) identificó una respuesta en blanco! Correctamente. Estoy usando jQuery 1.7.1.

0

le sugiero que convertir el resultado de retorno en una cadena a continuación, iniciar la validación, bcos ajax podría estar regresando un tipo de datos certaing que u no puede validar: probar este

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

lo que funcionó para mí fue:

if (data.length != 0) 
2

Recortar los datos de los espacios en blanco funcionó para mí.

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

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