2010-08-17 8 views
8

현재 응답이 비어 있는지 확인하려고합니다. 지금 내가 무슨 일을 생각하는 것은 다음과 같습니다 : AJAX 응답이 비어 있는지 확인하고 다른 문제가 있는지 확인하십시오.

$.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 나는 빈 응답을 분명히 반환 할 것으로 알고있는 데이터를 가져 오기 위해 노력하고 있으므로 관련 코드의 일부만 공격해서는 안됩니다.

나는 약간의 손실로 인해 어떤 도움을 주셔서 감사합니다.

답변

13

$.ajax 호출의 성공 처리기에 빠지면 빈 개체 리터럴이 반환됩니다 (반환되는 JSON 데이터 유형 인 경우). 그래서 당신은 null이 아니기 때문에 null 체크가 실패했습니다 - 실제로는 null이 아닙니다 - 그것은 비어 있습니다.

가 여기에 갈 수 있습니다 무엇의 샘플입니다 : 첫 번째 테스트에서

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

, 널 검사가 실패하고 당신이 '개체 [오브젝트]'의 경고를 얻을 것이다. 그러나 두 번째 테스트가 성공하면 '나는 비어 있습니다'라는 경고를 받게됩니다.

여기 jsFiddle에 대한 링크입니다 : http://jsfiddle.net/pcdP2/2/

$ .isEmptyObject() (JQuery와 API 당) jQuery를 1.4, 그래서 당신이 버전하지 않은 경우 사용할 수 없습니다. 제대로 빈 응답을 확인

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

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

어느 데이터 또는 $ .isEmptyObject (데이터) :!이 상황이 발생하는 경우

+0

그것은 나를 위해 일했습니다. –

+0

고마워요 :) –

1

데이터가 반환되지 않을 때에도 성공 함수가 null이 아닌 문자열을 전달한다고 생각합니다. 따라서 tData == '(tData == null을 확인하는 것 외에)를 확인해야 할 수도 있습니다.

+2

null에 대한 응답 비교가 실패하는 경우도 있습니다. '$ .isEmptyObject ($ response)'가 트릭을했습니다. – Sobiaholic

0

은 이상하게도 나는이 비교가 작동하는 것을 발견했다. jQuery 1.7.1을 사용하고 있습니다. 아약스는 u는 확인 안 열려 certaing의 데이터 유형을 반환 할 수 bcos 내가 제안

0

하면, 다음의 유효성을 검사 시작 문자열로 반환 결과를 변환 : 나를 위해 일한 무엇이

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

했다보십시오 :

if (data.length != 0) 
2

공백 데이터를 잘라 내면 효과적입니다.

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

     if (data) {      
       alert('Data available') 
     } else {       
      alert('Empty') 
     }      
}); 
관련 문제