Проверка, является ли ответ AJAX пустым и другие проблемы - PullRequest
8 голосов
/ 17 августа 2010

В настоящее время я пытаюсь проверить, является ли полученный ответ пустым.Теперь то, что я думаю, будет работать ниже:

 $.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, и я пытаюсь получить данные для чего-то, что, как я знаю, определенно вернет пустой ответ, поэтому, насколько я понимаю, он не должен даже попадать в эту часть кода.

Я немного растерялся, поэтому любая помощь очень ценится.

Ответы [ 6 ]

15 голосов
/ 17 августа 2010

Если вы попадаете в обработчик успеха вашего вызова $.ajax, вы, вероятно, получаете обратно пустой литерал объекта (если возвращается JSON dataType). То есть проверка на ноль не удалась, потому что на самом деле она не нулевая - она ​​пустая.

Вот пример того, что может происходить:

$(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 1.4 (согласно API jQuery), поэтому он не будет доступен, если вы не используете эту версию.

6 голосов
/ 05 августа 2013

То, что сработало для меня, было:

if ( data.length != 0 )
2 голосов
/ 08 апреля 2014

Обрезка данных для пробелов сработала для меня.

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

        if (data) {                     
               alert('Data available')
        } else {                         
             alert('Empty')
        }                       
});
1 голос
/ 17 августа 2010

Я полагаю, что функции успеха будет передана ненулевая строка, даже если данные не возвращаются, поэтому вам может потребоваться проверить tData == '' (в дополнение к проверке tData == null)

0 голосов
/ 06 июня 2013

Я предлагаю вам преобразовать возвращаемый результат в строку, а затем начать проверку, bcos ajax может возвращать определенный тип данных, который вы не можете проверить: Попробуйте это

succes:function(resultvalue)
     {
         var result = resultvalue.toString();
     if(result=='')
     {
        alert('the result is empty'); 
     }
     else
     {
                alert('the result is not empty'); 
     }
     }
0 голосов
/ 22 марта 2013

Как ни странно, когда я столкнулся с такой ситуацией, я обнаружил, что это сравнение работает:

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

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

Ни! Data, ни $ .isEmptyObject (data) не определили пустой ответ правильно.Я использую jQuery 1.7.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...