Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как достать данные из JSON массива? (https://javascript.ru/forum/jquery/33558-kak-dostat-dannye-iz-json-massiva.html)

Dimaz 27.11.2012 18:54

Как достать данные из JSON массива?
 
Всем привет. Подскажите как можно достать данные из json массива. Формирую его на сервере следующим образом:
$m_query = mysql_query("SELECT * FROM `tests` WHERE `test_id` = '". $test_id ."'");
while($row = mysql_fetch_array($m_query, MYSQL_ASSOC)) {
$arr[] = array('id' => $row['test_id'], 'questions' => $row['questions'], 'answers' => $row['answers']);
}
echo json_encode($arr);

Клиенту приходит json такого вида:
[{"test_id": "1", "questions": "How are you:", "answers": "ok"}, {"test_id": "1", "questions": "How old are you:", "answers": "22"}]
Пытаюсь вывести так:
$.post('save_data.php', {drink: drink},
function(data){
var questions = data.questions;
var answers = data.answers;
$('#feeds').html(questions);
}, "json");

Но ничего не выводится. Как можно достать значение ключа "questions", содержащегося в json массиве?

Amphiluke 27.11.2012 19:34

Цитата:

Сообщение от Dimaz
var questions = data.questions;

Видимо,
var questions = data[i].questions;

где i — целочисленный индекс (0, 1)

vadim5june 27.11.2012 19:38

var d=JSON.parse();//,???
var questions = d[0].questions;
....

Dimaz 27.11.2012 19:48

Все равно ничего не получается:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
var questions = data.questions;
var answers = data.answers.split(',');
var enter_to = '';
 for ( var i=0, l=questions.length; i<l; i++) {
    enter_to = "<b>Вопрос 1</b><Br>" + "<b>" + questions[i] + "</b><Br>";
 for (var i2=0, l2=answers.length; i2<l2; i2++) {
    enter_to += "<b>" + answers[i2] + "</b><Br>";
}
$('#feeds').html(enter_to);
}
  }, "json"); 
return false;
});
});

Использую метод split, так как в последнем поле БД значения перечислены через запятую. Я хочу добиться того, чтобы в браузер выводился первый вопрос, потом варианты ответов, потом второй вопрос и опять варианты.

Dimaz 27.11.2012 19:51

В базе данных 3 поля: "test_id", "questions" и "answers", а также 2 строки. В каждой строке по одному вопросу и варианты ответов через запятую.

Amphiluke 27.11.2012 19:57

Цитата:

Сообщение от Dimaz
data.questions

Откуда вы вообще это берете?


Если
Цитата:

Сообщение от Dimaz
Клиенту приходит json такого вида:
[{"test_id": "1", "questions": "How are you:", "answers": "ok"}, {"test_id": "1", "questions": "How old are you:", "answers": "22"}]

то
data.questions == undefined.

Цикл нужно организовывать по массиву data непосредственно

Dimaz 27.11.2012 20:04

Если б я знал как это сделать)

Dimaz 27.11.2012 20:12

Сделал так:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
for (var i in data) {
var row = data[i];

$('#feeds').html('<b>' + row.questions + '</b>');
}
  }, "json"); 
return false;
});
});

Но он почему то выводит только один вопрос, который находится во второй строке БД. А тот что в первой строке не выводит. Нужно чтоб оба вывел. Как сделать подскажите.

vadim5june 27.11.2012 20:20

var row='';
for (var i in data) {
var row+ = '<br><b>'+data[i].questions+'</b>';};
$('#feeds').html(row);

Dimaz 27.11.2012 20:32

Спасибо большое! А то я мучился целый день. Только немножко подправить надо:
var row='';
for (var i in data) {
row+ = '<br><b>'+data[i].questions+'</b>';
$('#feeds').html(row);

Второй раз переменную row объявили.:)


Часовой пояс GMT +3, время: 01:29.