Скрипт выдает странный json

Dimaz

Новичок
Всем привет. У меня такая проблема. Функция json_encode передает странный json клиенту. Вот код PHP:
PHP:
$m_query = mysql_query("SELECT * FROM `answers` WHERE `answer_id` = '". $answer_id ."'");
while($row = mysql_fetch_array($m_query)) {
echo json_encode ( $row );
}
А вот код скрипта JQuery:
PHP:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
    $('#feeds').text("Data Loaded: " + data);
  });
return false;
});
});
Браузер записывает в элемент с идентификатором 'feeds':
Data Loaded: {"0":"184918649","user_id":"184918649","1":"3","answer_id":"3"}
В БД у меня всего 2 поля, "user_id" и "answer_id". Зачем он дублирует значения, содержащиеся в этих полях. "0":"184918649" и "1":"3" зачем прописывает? Кстати, строка в БД у меня всего одна.
 

Фанат

oncle terrible
Команда форума
во-первых, если в базе всего одна строка, то цикл здесь не при чем (и зачем он вообще здесь - загадка)

во-вторых, у тебя, как у программиста, должны быть идеи, как проверить, виновата json_encode, или нет.
нужно логическое мышление.
 

Dimaz

Новичок
Так кто-нибудь знает в чем причина? Я не могу понять почему он так делает.
 

Фанат

oncle terrible
Команда форума
ты должен узнать это сам.
программирование тем и отличается от художественной лепки, что программа представляет из себя не однородную серую массу, а состоит из отдельных частей.
выполняемых последовательно.

и программист может в любой момент взять и любую часть проверить.

"понимать" при этом ничего не надо. не надо вообще зря расходовать такой ценный ресурс, как мозг, заставляя его думать без надлежащих исходных данных.
Надо эти данные сначала получить.
запросив их у программы.

Для начала надо ответить себе на вопрос - что делает каждая функция твоей программы, и что она возвращает.
после этого - проверить. каждую функцию. действительно ли она возвращает именно то, что мы ждём. и если не то - то почему.

Подсказка: проверять надо по цепочке. Не сидеть возле программы, как у разбитого корыта, вздыхая "ой, чой-та она мне вывела", а последовательно разбираться - на каком именно этапе произошёл сбой.
 

Dimaz

Новичок
Понял я.) Посмотрел в документации про функцию mysql_fetch_array(). Там в значении по умолчанию стоит константа MYSQL_BOTH. Используя MYSQL_BOTH, вы получите массив, состоящий как из ассоциативных индексов, так и из численных. Поставил константу MYSQL_ASSOC, теперь возвращает массив, состоящий только из ассоциативных индексов:
Data Loaded: {"user_id":"184918649","answer_id":"3"}
На самом деле этот вопрос был вторичным. Главная проблема в том, что я не могу обработать полученные данные на клиенте.
PHP:
$.post('save_data.php', {drink: drink},
function(data){
var x = data.user_id;
    $('#feeds').text("Data Loaded: " + x);
  });
В элемент записывается текст:
Data Loaded: undefined
А нужно, чтобы вывел: Data Loaded: 184918649
 

Фанат

oncle terrible
Команда форума
я не очень хорошо разбираюсь в жквери, но попробуй указать тип результата.
плюс опять, тем же методом - проверяем на каждой строчке (уже яваскрипта), в какой момент что пошло не так
 

Dimaz

Новичок
Указал последний параметр метода $.post, тип данных. Поставил "json".
PHP:
$.post('save_data.php', {drink: drink},
function(data){
var x = data.user_id;
    $('#feeds').text("Data Loaded: " + x);
  }, "json");
Теперь все работает как надо, выводит:
Data Loaded: 184918649
Спасибо за наводку:)
 

Dimaz

Новичок
До этого я тоже указывал этот параметр. Выводил undefined(не определен) по той причине, что JSON строится на структуре набор пар ключ/значение. Ключом может быть только строка, значением — любая форма. В моем случае ключом были и числовые значения и строки:
{"0":"184918649","user_id":"184918649","1":"3","answer_id":"3"}. А синтаксис JSON не позволяет использовать в качестве ключа числовые значения, следовательно возвращалось "undefined".
Ну это я так на справку) Вдруг кому-нибудь пригодится кто столкнется с аналогичной проблемой:)
 

HEm

Сетевой бобер
echo json_encode ( $row ); выводит не те данные какие надо, значит надо проверить, а что у нас в $row? Не говорить - да у меня же в базе там одна строка, я точно знаю, что выдается, а взять и сделать var_dump($row);
 
Сверху