Становится неопределенным, когда база данных пуста

#javascript #titanium

#javascript #titanium

Вопрос:

У меня проблема с моим мобильным приложением, я не знаю, как ее решить. когда я нажимаю кнопку, которая получает данные из базы данных, я анализирую их в формате json, и когда я хочу использовать его в своем приложении, я получаю undefined. Как я могу сделать так, чтобы я не получал неопределенное.

Обратите внимание, что я получаю undefind только тогда, когда база данных пуста.

Это код, который я использую

 subjectButton.addEventListener('click', function(e) {
    Subjects.getSubjects(url, function(response) {
        if(response == '') {
            alert('There where no subjects found');
        } else {
           subjectView.remove(subjectsLabel);

           var data = JSON.parse(response);

           if(data != 'undefined') {

               var subjectNameButton = [];
               var subjectEditButton = [];
               var subjectDeleteButton = [];
               for(i in data) {
                   id = data[i].id;
                   var subject = data[i].subject;
                   var year = data[i].year;
                   var status = data[i].status;
                   var color;

                   Ti.API.info('id: '   id);
                   Ti.API.info('type id: '  typeof id);
 

Может кто-нибудь объяснить мне, как я могу сделать так, чтобы я не получал неопределенное

Ответ №1:

Как @0101 сказал, что json не может вернуться undefined , поэтому ваша проблема где-то в другом месте. Я знаю, что это не лучшее решение, но, похоже, оно работает для меня:

 subjectButton.addEventListener('click', function(e) {
        Subjects.getSubjects(url, function(response) {
                if(response == '') {
                        alert('There where no subjects found');
                } else {
                     subjectView.remove(subjectsLabel);

                     var data = JSON.parse(response);

                     var subjectNameButton = [];
                     var subjectEditButton = [];
                     var subjectDeleteButton = [];
                     for(i in data) {
                             id = data[i].id;
                             var subject = data[i].subject;
                             var year = data[i].year;
                             var status = data[i].status;
                             var color;

                             Ti.API.info('id: '   id);
                             if(id != undefined) {
                                    //Your code here
                             } else {
                                     alert('There where no subjects found');
                             }
                        }
                 }
        });
});
 

Итак, здесь у вас есть проверка, возвращает ли одна из переменных undefined или нет. Если это не так undefined , он запустит ваш код, иначе он выдаст вам / пользователю предупреждающее сообщение

Ответ №2:

Вы никогда не получите "undefined" from JSON.parse . Ошибка, должно быть, произошла где-то в другом месте. Попробуйте это:

 Subjects.getSubjects(url, function(response) {
    if(!response) {
        alert('There where no subjects found');
    }
    else {
       subjectView.remove(subjectsLabel); // You probably should move this after JSON.parse

       try {
        var data = JSON.parse(response),
            subjectNameButton = [],
            subjectEditButton = [],
            subjectDeleteButton = [];

           for (i in data) { // Global i?
               id = data[i].id; // Global too?
               var subject = data[i].subject;
               var year = data[i].year;
               var status = data[i].status;
               var color;

               Ti.API.info('id: '   id);
               Ti.API.info('type id: '  typeof id);
               // ...
           }
       }
       catch(e) {
            console.log("Invalid JSON")
       };

       // ...
    }
}