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

  • Автор темы Автор темы Dimaz
  • Дата начала Дата начала

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" зачем прописывает? Кстати, строка в БД у меня всего одна.
 
во-первых, если в базе всего одна строка, то цикл здесь не при чем (и зачем он вообще здесь - загадка)

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

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

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

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

Подсказка: проверять надо по цепочке. Не сидеть возле программы, как у разбитого корыта, вздыхая "ой, чой-та она мне вывела", а последовательно разбираться - на каком именно этапе произошёл сбой.
 
Понял я.) Посмотрел в документации про функцию 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
 
я не очень хорошо разбираюсь в жквери, но попробуй указать тип результата.
плюс опять, тем же методом - проверяем на каждой строчке (уже яваскрипта), в какой момент что пошло не так
 
Указал последний параметр метода $.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
Спасибо за наводку:)
 
До этого я тоже указывал этот параметр. Выводил undefined(не определен) по той причине, что JSON строится на структуре набор пар ключ/значение. Ключом может быть только строка, значением — любая форма. В моем случае ключом были и числовые значения и строки:
{"0":"184918649","user_id":"184918649","1":"3","answer_id":"3"}. А синтаксис JSON не позволяет использовать в качестве ключа числовые значения, следовательно возвращалось "undefined".
Ну это я так на справку) Вдруг кому-нибудь пригодится кто столкнется с аналогичной проблемой:)
 
echo json_encode ( $row ); выводит не те данные какие надо, значит надо проверить, а что у нас в $row? Не говорить - да у меня же в базе там одна строка, я точно знаю, что выдается, а взять и сделать var_dump($row);
 
Сверху