2016-11-16 4 views
2

Почему я получаю undefined в data.length в ajax.sucess?Успех Ajax: длина данных Undefined

Вот код, некоторые части удалены для краткости:

$.ajax({ 
    data: JSON.stringify(data), 
    url: urlGetProviderQualificationTimeData, 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     if (data.length > 0) { 
      $("#loading").hide(); 
      $("#providerqualification-main").show(); 
      $("#tblProviders").show(); 
      SetHeaderFields(data); 
     } else { 
      $("#NoRecordFound").show(); 
      $("#providerqualification-main").hide(); 
     } 
    }, 
    complete: function (e) { 
     $("#loading").hide(); 
    } 
}); 

enter image description here

+0

проверить, как если (data.hasOwnProperty ('адрес')) {// здесь код} –

+0

Возможный дубликат [Как получить длину объекта] (HTTP: // StackOverflow .com/questions/5533192/how-to-get-object-length) –

+0

Консоль данных ответа. Если это массив или строка 'length' данных, будет определена. Если ответ является объектом, используйте 'Object.keys (data) .length' – Harish

ответ

3

Вашего data объект не имеет length свойства (и объекта не один, как Массивы do), поэтому это undefined.

Учитывая контекст вашего кода, вы просто хотите проверить, имеет ли возвращенный объект некоторые данные внутри него. Если да, то вы можете использовать это:

success: function (data) { 
    if (!data || !Object.keys(data).length) { 
     $("#NoRecordFound").show(); 
     $("#providerqualification-main").hide(); 
    } else { 
     $("#loading").hide(); 
     $("#providerqualification-main").show(); 
     $("#tblProviders").show(); 
     SetHeaderFields(data); 
    } 
}); 
+0

Это решило мою проблему! Спасибо –

+0

Означает ли это, что если какое-либо свойство будет равно null, это будет верно? –

+0

Нет, он проверяет, существует ли объект и имеет ли он хотя бы одно свойство. Значение этого свойства может быть нулевым, и оно все равно будет считаться действительным –