За последние 24 часа нас посетили 22890 программистов и 1261 робот. Сейчас ищут 719 программистов ...

Не могу получить доступ к свойствам массива, полученным по Ajax

Тема в разделе "JavaScript и AJAX", создана пользователем sharunm, 15 дек 2019.

  1. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Приветствую,

    Вот код:

    Код (Javascript):
    1. $(document).ready(function () {
    2.    
    3.    
    4.     var begincat = 1; // начальная категория, с которой получаем все данные
    5.     var objects = new Array;
    6.     var currentoblject = 0;
    7.     function create_objects() { //Создаем объекты на основе категорий товаров в категории с id=1
    8.        
    9.         $.ajax(
    10.             {
    11.                 url: '/api/categories?parent_id=1',
    12.                 dataType:'json',
    13.                 method:'get',
    14.                 done: function(response){
    15.                     for ( let i = 0; i < response.length; i++ ) {
    16.                         objects[i] = new Array;
    17.                         objects[i]['category_id'] = response[i].id;
    18.                         objects[i]['category'] = response[i].category;
    19.                         objects[i]['font-type'] = '';
    20.                         objects[i]['text1-size'] = 14;
    21.                         objects[i]['text2-size'] = 14;
    22.                         objects[i]['topimage1'] = '';
    23.                         objects[i]['topimage2'] = '';
    24.                         objects[i]['bottomimage1'] = '';
    25.                         objects[i]['bottomimage2'] = '';
    26.                         objects[i]['topimage1'] = '';
    27.                         objects[i]['color'] = '#fc0';
    28.                         objects[i]['currentproduct'] = 0;
    29.                         //получим список товаров и их свойства, входящие в категорию
    30.                             $.ajax({
    31.                                 url: '/api/products?category_id=' + response[i].id,
    32.                                 dataType:'json',
    33.                                 method:'get',
    34.                                 done: function(products) {
    35.                                     objects[i]['products'] = products;
    36.                                 }
    37.                             });
    38.                         //
    39.                        
    40.                     }
    41.                     //console.log(response.length);
    42.                 }
    43.             }          
    44.         );
    45.        
    46.     }
    47.    
    48. create_objects(); //инициализируем функцию, чтобы данные записались в objects  
    49. console.log(objects);
    50. console.log(objects[0]);
    51.    
    52.     function drawobject(object) { //Функция отображения объекта по его порядковому номеру в массиве
    53.         //$('#productphoto1').html('<img src="'+objects[object]['products'][0].photo_f+'" class="img-fluid"/>');
    54.        
    55.     }
    56.    
    57.     drawobject(currentoblject);
    58.    
    59. });
    В консоли следующие результаты:
    Код (Text):
    1.  
    2. console.log(objects); //показывает объект
    3. console.log(objects[0]); //показывает undefinded
    Как мне написать код так, чтобы получать нормальный доступ ко всем свойствам objects?
    Я новичок в JS. Менял success на done, наоборот, ничего не меняется
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    так что нибудь есть?
    Код (Javascript):
    1. $(document).ready(function () {
    2.  
    3.     var objects;
    4.     function create_objects() {
    5.      
    6.         $.ajax(
    7.             {
    8.                 url: '/api/categories?parent_id=1',
    9.                 dataType:'json',
    10.                 method:'get',
    11.                 done: function(response){
    12.                     objects = response;
    13.                 }
    14.             }        
    15.         );
    16.      
    17.     }
    18.     console.log(objects);
    19.  
    20. });
     
  3. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    done, вообще, пустой отдал массив. Когда закидываю objects в консоль, то он его распечатывает. А когда обращаюсь к элементу objects[0], то undefinded
     
  4. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    у вас там мне кажется строка. а не массив
     
  5. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    typeof(objects) - пишет объект
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    ну покажите хоть кусочек, что там
     
  7. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Код (Javascript):
    1.          success: function(data)
    2.          {
    3.           var data = JSON.parse(data);
    4.           //- Дальше ваш код.
    Стоит проверить, что пришли нужные данные, прежде чем пихать его в for.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Так покажите, что за json-ина приходит с сервера.

    @lastdays, он же указал dataType: "json", jQuery сама в таком случае декодирует жсонину