Проверка содержимого var, расположенного внутри $ .each (), если json ответ перед $ .each () пуст - PullRequest
0 голосов
/ 10 апреля 2020

$(document).ready(function() {
  $.getJSON("https://v4p4sz5ijk.execute-api.us-east-1.amazonaws.com/anbdata/states/notams/notams-list?format=json&api_key=90824210-70a2-11ea-9997-6943540cb84c&locations=opla", function(data) {

    //opst at the end of url points to an empty json file []. If opst is changed to opla then it points to a json file with data. 

    $.each(data, function(key, value) {

      var obj = value.Subject;

      if ($('obj').val() === '') {
        console.log("empty"); // with opst (json file with no data) this is expected but it is not shown.
      } else {
        console.log("not empty"); // with opla (json file with data) this is expected and it is shown correctly as expected.
      }

    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Попытка проверить содержимое в файле json. Если в файле json есть данные, то console.log отображает «не пустой», но если в файле json нет данных (т. Е. Он содержит только []), console.log не отображает «пустой». Код:

$(document).ready(function(){
    $.getJSON("url/test.json",function(data) {
        $.each(data, function(key,value) {
            var obj = value.Subject;
            //  OPTION 1
            if(obj=="") {
                console.log("empty"); //This does not work
            } 
            else {
                console.log("not empty"); //This works
            }       
        });
    });
});

Другие варианты, которые я пробовал:

//  OPTION 2
if ($('obj').val() === '') { 
    console.log("empty"); //This does not work
} else {
    console.log("not empty"); //This works
}    

// OPTION 3
if(Object.keys(obj).length === 0 && obj.constructor === Object){
    console.log("empty"); //This does not work
} else {
    console.log("not empty"); //This works  
}

Но результат тот же. Похоже, я делаю одну и ту же ошибку во всех случаях. Нужна помощь в выявлении ошибки. Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Я не уверен, что понимаю проблему. Разве вы не можете просто проверить наличие и длину?

Каждый из них не будет выполнен вообще, если данные не имеют длины

$(document).ready(function() {
  $.getJSON("https://v4p4sz5ijk.execute-api.us-east-1.amazonaws.com/anbdata/states/notams/notams-list?format=json&api_key=90824210-70a2-11ea-9997-6943540cb84c&locations=opst", function(data) {

    //opst at the end of url points to an empty json file []. If opst is changed to opla then it points to a json file with data. 
    if (data === null || data && data.length === 0) {
      console.log("no data");
    } else {
      $.each(data, function(key, value) {

        var obj = value.Subject;

        if ($('obj').val() === '') {
          console.log("empty"); // with opst (json file with no data) this is expected but it is not shown.
        } else {
          console.log("not empty"); // with opla (json file with data) this is expected and it is shown correctly as expected.
        }

      });
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
0 голосов
/ 10 апреля 2020

, чтобы вы могли написать служебную функцию

function isEmpty(obj) {
    for(var key in obj) {
        if(obj.hasOwnProperty(key))
            return false;
    }
    return true;
} 

, затем после вызова ajax

if(data.isEmpty()) {
    console.log("empty");
} else {
     console.log("no empty");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...