JQuery Обратный вызов Ajax для результата массива

У меня есть следующий сценарий jQuery Ajax, в котором веб-метод возвращает коллекцию строк.

  • Коллекция может быть нулевой
  • Коллекция может быть не нулевой, но нулевой.
  • В коллекции есть одна или несколько записей

Следующий код работает нормально. Он использует jQuery.isEmptyObject. Рекомендуется не использовать isEmptyObject(), если это не Plain Object.

Как мы можем обрабатывать результат без использования isEmptyObject()?

Примечание. Результат "ajax" появляется как "не простой".

Ссылка:

CODE

//Callback Function
function displayResultForLog(result) 
{


if (result.hasOwnProperty("d")) 
{
    result = result.d
}


if ($.isPlainObject(result)) {
    alert('plain object');
}
else 
{
    alert('not plain');
}

if($.isEmptyObject(result))
{
    //Method returned null        
    $(requiredTable).append('No data found for the search criteria.');
}
else
{

    if (result.hasOwnProperty('length')) 
    {

        //Set the values in HTML
        for (i = 0; i < result.length; i++) 
        {
            var sentDate = result[i];
        }
    }

    else 
    {
      //Method returned non-null object; but there is no rows in that        
      $(requiredTable).append('No data found for the search criteria.');
    }

  }

 }

function setReportTable(receivedContext) {

var searchInput = '111';
$.ajax(
        {
            type: "POST",
            url: "ReportList.aspx/GetReportsSentWithinDates",
            data: '{"searchInput": "' + searchInput + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            context: receivedContext, //CONTEXT
            success: displayResultForLog

        }
        );
 }

Ответ 1

В настоящее время я использую следующее. Любые предложения по улучшению?

 function displayResultForLog(result) 
 {
   if (result.hasOwnProperty("d")) {
       result = result.d
   }

if (result !== undefined && result != null )
{
    if (result.hasOwnProperty('length')) 
    {
        if (result.length >= 1) 
        {
            for (i = 0; i < result.length; i++) {

                var sentDate = result[i];

            }
        }
        else 
        {
            $(requiredTable).append('Length is 0');
        }
    }

    else 
    {
        $(requiredTable).append('Length is not available.');
    }

}
else 
{
    $(requiredTable).append('Result is null.');
}
}

Ссылка для undefined находится здесь JavaScript undefined Свойство

Свойство undefined указывает, что переменной не присвоено значение.

Ответ 2

Вместо

if($.isEmptyObject(result))

будет

if(typeof result !== 'undefined' && result.length < 1)

работа?

Ссылка для undefined находится здесь JavaScript undefined Свойство

Свойство undefined указывает, что переменной не присвоено значение.