Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.11.2012, 18:54
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Как достать данные из 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 массиве?
Ответить с цитированием
  #2 (permalink)  
Старый 27.11.2012, 19:34
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от Dimaz
var questions = data.questions;
Видимо,
var questions = data[i].questions;

где i — целочисленный индекс (0, 1)
Ответить с цитированием
  #3 (permalink)  
Старый 27.11.2012, 19:38
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

var d=JSON.parse();//,???
var questions = d[0].questions;
....
Ответить с цитированием
  #4 (permalink)  
Старый 27.11.2012, 19:48
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Все равно ничего не получается:
$(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, так как в последнем поле БД значения перечислены через запятую. Я хочу добиться того, чтобы в браузер выводился первый вопрос, потом варианты ответов, потом второй вопрос и опять варианты.
Ответить с цитированием
  #5 (permalink)  
Старый 27.11.2012, 19:51
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

В базе данных 3 поля: "test_id", "questions" и "answers", а также 2 строки. В каждой строке по одному вопросу и варианты ответов через запятую.
Ответить с цитированием
  #6 (permalink)  
Старый 27.11.2012, 19:57
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от 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 непосредственно

Последний раз редактировалось Amphiluke, 27.11.2012 в 19:59.
Ответить с цитированием
  #7 (permalink)  
Старый 27.11.2012, 20:04
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Если б я знал как это сделать)
Ответить с цитированием
  #8 (permalink)  
Старый 27.11.2012, 20:12
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сделал так:
$(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;
});
});

Но он почему то выводит только один вопрос, который находится во второй строке БД. А тот что в первой строке не выводит. Нужно чтоб оба вывел. Как сделать подскажите.
Ответить с цитированием
  #9 (permalink)  
Старый 27.11.2012, 20:20
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

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

Последний раз редактировалось vadim5june, 27.11.2012 в 20:30.
Ответить с цитированием
  #10 (permalink)  
Старый 27.11.2012, 20:32
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

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

Второй раз переменную row объявили.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные из jqGrid в текстовое поле? Rooner jQuery 2 27.09.2012 19:31
как вытащить(засунуть) данные из(в) mysql таблички l-liava-l Оффтопик 1 23.09.2012 21:31
Как вывести данные из PHP Sherminator Events/DOM/Window 2 07.08.2012 20:11
Как разделить данные в JSON vyaceslav.kr jQuery 2 14.07.2012 18:34
Help ! Как загрузить данные по ссылке из таблицы1 в таблицу2 ? asked86 Общие вопросы Javascript 1 25.03.2009 21:06