Чтение данных из JSON в JQuery

107
16

Об этом, возможно, задавали много раз раньше, но я не могу получить результаты от JSON, когда я пытаюсь предупредить его, он говорит undefined, когда я предупреждаю data.results.vote_sum или data.results.url или другие узлы.

 $(document).ready(function() {

function callJson() {

$('.my-div').hide();

var jqxhr = $.get("url", function(data) {
console.log("success");
alert(data.results.vote_sum);
alert(data.results.title);
$('.my-div').prepend(data);
})
.done(function() { console.log("second success"); })
.fail(function() { console.log("error"); })
.always(function() { console.log("finished"); $('.my-div').show(); });
}
callJson();
});

<div class="my-div">

</div>

JSON:

{
"count":1,
"results":[
{
"result_type":"article",
"position":0,
"comments_disabled":false,
"label_names":[

],
"vote_sum":0,
"locale":"en-us",
"section_id":1234,
"url":"http://www.xyz.com",
"id":200820164,
"html_url":"http://www.xyz.com/123",
"draft":false,
"source_locale":"en-us",
"title":"What are these sections and articles doing here?",
"updated_at":"2014-02-07T23:46:17Z",
"promoted":false,
"name":"What are these sections and articles doing here?",
"created_at":"2014-02-07T23:46:17Z",
"translation_ids":[
12345
],
"author_id":123455,
"vote_count":0
}
],
"previous_page":null,
"facets":null,
"next_page":null
}

спросил(а) 2014-03-04T11:29:00+04:00 6 лет, 6 месяцев назад
1
Решение
57

В результате получается массив. Пытаться:

alert(data.results[0].vote_sum);

ответил(а) 2014-03-04T11:33:00+04:00 6 лет, 6 месяцев назад
57

Вы пытаетесь извлечь значение из результатов, но сами результаты - это массив.

Что дает "неопределенное" значение, когда вы пытаетесь получить data.results.vote_sum


Вместо этого вы должны пойти для data.results[0].vote_sum который дает значение "0", принадлежащее этому конкретному индексу "vote_sum" в массиве результатов.

Пожалуйста, ознакомьтесь со ссылкой на скрипт для демонстрации.

ответил(а) 2014-03-04T11:46:00+04:00 6 лет, 6 месяцев назад
57

Результатом является массив. Таким образом, вы должны так использовать

data.results[0].vote_sum

ответил(а) 2014-03-04T11:32:00+04:00 6 лет, 6 месяцев назад
41

$.each(data,funciton(index,item){
$.each(data[index].result,function(index,item){
//now you can use all the objects
alert(item.result_type)

});
});

ответил(а) 2014-03-04T11:46:00+04:00 6 лет, 6 месяцев назад
41

data.results - массив и не имеет свойства, называемого vote_sum и попытка получить доступ к неопределенному свойству должна давать undefined Так как другие отметили, что вы должны индексировать данные массива. data.results[0].vote_sum также могут быть более явными в ваш код. Если вы всегда ожидаете возвращения JSON, я бы предложил использовать getJSON вместо get

       $.getJSON("url", function(data) {
var result = data.results[0];
console.log("success");
alert(result.vote_sum);
alert(result.title);
$('.my-div').prepend(data);
})

ответил(а) 2014-03-04T11:40:00+04:00 6 лет, 6 месяцев назад
41

Попробуйте использовать $.getJSON() вместо $.get() поскольку вы работаете с JSON здесь:

var jqxhr = $.getJSON("url", function(data) {
console.log("success");
alert(data.results[0].vote_sum);
alert(data.results[0].title);
$('.my-div').prepend(data);
})

и изменить данные. data.results к данным. data.results[0] поскольку results представляют собой массив.

ответил(а) 2014-03-04T11:37:00+04:00 6 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема