Как заполнить объект javascript из файла JSON - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в JavaScript. Я только начал несколько недель go. Я пытаюсь заполнить объект js self.data из файла json. Я думал, что он у меня есть, но на самом деле он не заполняет его, так как я не могу получить доступ ни к одной из пар ключ: значение.

self.data = {
    
};

self.util = {
    ajax: function(url, funcSuccess) {
        self.ctx.$.ajax(url, {
            contentType: 'application/json',
            success: function(data) {
                funcSuccess(data);
            }
        });
    },
};

self.getData = function () {
    var obj;
    self.util.ajax("./data.json",function(data){
        obj = {...data.manufacturer}; 
        self.data["color"] = obj.model[0];
        self.data["year"] =  obj.model[1];
        self.data["miles"] =  obj.model[2];

        self.data["turbo"] = obj.features[0];
        self.data["rims"] = obj.features[1];  
        self.data["heated_seats"] = obj.features[2];      
    })
    
};

self.onInit = function () {
    self.getData(); 
    
};

Я также попытался создать каждый член в себе. данные и не присваивают им никакой реальной ценности. Когда я делаю console.log (self.data), отображается пустой массив, но когда я нажимаю на него, он расширяется, и я вижу все значения, которые я назначил.

EDIT1: Когда я делаю

console.log(self.data)

на моей странице HTML консоль покажет следующее:

v{}
 >color
 >year
 >miles
 >turbo
 >rims
 >heated_seats

Но я не могу получить доступ ни к одному из этих объектов через свой код.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы правильно назначаете данные self.data. Вы можете использовать данные только тогда, когда ваш self.util. ajax ("./ data. json" ..) прошел успешно.

Кроме того,

  • Это может быть возможно, вы используете переменную до того, как ей присвоили
  • , или также проверьте область действия переменной.

Если ваш obj = {...data.manufacturer}; имеет правильные данные. затем поместите console.log (self.data) после self.data["heated_seats"] = obj.features[2];, вы обязательно получите результат на консоли.

Пример:

self.getData = function () {
    var obj;
    self.util.ajax("./data.json",function(data){
        obj = {...data.manufacturer}; 
        self.data["color"] = obj.model[0];
        self.data["year"] =  obj.model[1];
        self.data["miles"] =  obj.model[2];

        self.data["turbo"] = obj.features[0];
        self.data["rims"] = obj.features[1];  
        self.data["heated_seats"] = obj.features[2];  
        console.log(self.data);    
    })
    
};
0 голосов
/ 10 июля 2020

Сначала вы должны убедиться, что URL-адрес действительно возвращает ожидаемый результат. Либо проверьте сетевой запрос в отладчике браузера, либо вставьте URL-адрес в свой браузер напрямую.

Если вы получаете ответ и если сервер не устанавливает соответствующий заголовок типа контента в ответе (он должен быть настроен заголовок ответа приложения / json), тогда jquery ajax предоставит вам строку, содержащую данные, вместо объекта. Если вы не можете или не хотите настраивать сервер, вы можете просто вызвать JSON .parse для результата самостоятельно.

Если сервер не возвращает ответ 200, содержащий json, тогда у вас есть проблема на стороне сервера или ваш URL-адрес неверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...