heksen
@heksen

Почему не парситься ответ JSON?

Привет! Не могу распарсить ответ json уже который раз .
Ответ:
{"id":"1","fio":"hhhhhh","pn":"1","vt":"1","sr":"1","cht":"1","pt":"2","sb":"1","vs":"1","user_id":"154","group_id":"0","data_reg":"2015-11-18"}{"id":"2","fio":"sdfsdfsdf","pn":"2","vt":"3","sr":"1","cht":"2","pt":"3","sb":"1","vs":"2","user_id":"154","group_id":"0","data_reg":"2015-11-10"}

При вызове:
obj = jQuery.parseJSON( data );

Всё перестаёт работать.

При обращении к полю fio:
console.log(obj.fio);

выводит в консоль ошибку.
Uncaught SyntaxError: Unexpected token 

Появляется какой-то символ в начале ответа.

Что делать?

сервер:
if ( $_GET["func"] == "GetPersonal" )
{
 $result = $mysqli->query( "SELECT * FROM personal WHERE user_id='".$_SESSION['user_id']."'" );
 if (!$result) error($mysqli->error);
 if ( $result->num_rows > 0 )
 {  
   while($row = $result->fetch_assoc()) 
   {
    $myArray[] = $row;    
   }
 echo json_encode($row);
 }
 else
 {
  echo json_decode( array( "answer" => "empty" ) );
 }

 $result->free();
 $result->close();
 $mysqli->close();
 exit();
}
  • Вопрос задан
  • 1520 просмотров
Решения вопроса 3
DevMan
@DevMan
нужно не выводить каждый ряд, а собирать их в массив и вызывать json_encode один раз в конце скрипта.
if ( $result->num_rows > 0 )
 {  
   while($row = $result->fetch_assoc()) 
   {
    $myArray[] = $row;
   }
   echo json_encode($myArray);
 }
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега PHP
Сферический тест в вакууме отрабатвыает: jsfiddle.net/jsogsedm

Появляется какой-то символ в начале ответа.

Первый символ строки - U+FEFF (неразрывный пробел с нулевой шириной), известный также как BOM (byte order mark, метка порядка байтов). Это несуществующий символ, используемый для того, чтобы отличать различные представления unicode.

Желательно удалить его из PHP-файла (инструкция для Notepad++), но если нет такой возможности, то можно на стороне js очистить пришедшую строку от лишних символов. Сделать это можно так:
function cleanString(input) {
    var output = "";

    for (var i=0; i<input.length; i++) {
        if (input.charCodeAt(i) <= 127) {
            output += input.charAt(i);
        }
    }

    return output;
}


Пример: jsfiddle.net/jsogsedm/2
Ответ написан
Hatsune-Miku
@Hatsune-Miku
Няшк :3
А может PHP файл имеет BOM сегмент?)

Попробуйте перед отдачей JSON отчистить буфер. Аля ob_get_clean();
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
EnterSandman
@EnterSandman
Эникей
Заключить в квадратные скобки
Ответ написан
Stalker_RED
@Stalker_RED
jsfiddle.net/zdbhvdr5

У вас {...}{...} а должно быть [{...},{...}]
Замените
while($row = $result->fetch_assoc()) {
    $myArray[] = $row;
    echo json_encode($row);
}

на
while($row = $result->fetch_assoc()) {
    $myArray[] = $row;
}
echo json_encode($myArray);
Ответ написан
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Все дело в том, что в вашем JSON (а точнее, это и не является корректным json'ом) выведено несколько объектов подряд, так делать нельзя. Они не являются частью большого целого и, соответственно, не могут быть вместе распаршены..ены..сены? преобразованы в JavaScript сущность. Вам нужно привести ответ к виду:

[
    {"id":"1","fio":"hhhhhh","pn":"1","vt":"1","sr":"1","cht":"1","pt":"2","sb":"1","vs":"1","user_id":"154","group_id":"0","data_reg":"2015-11-18"},
    {"id":"2","fio":"sdfsdfsdf","pn":"2","vt":"3","sr":"1","cht":"2","pt":"3","sb":"1","vs":"2","user_id":"154","group_id":"0","data_reg":"2015-11-18"}
]


°•Как-то так•°
if ( $_GET["func"] == "GetPersonal" ){
  $result = $mysqli->query( "SELECT * FROM personal WHERE user_id='".$_SESSION['user_id']."'" );
  if (!$result) error($mysqli->error);

  if ( $result->num_rows > 0 ) {  
    while($row = $result->fetch_assoc()) {
      $myArray[] = $row;    
    }
    echo json_encode($myArray);
  } else {
    echo json_decode('{"answer" : "empty"}');
  }

 $result->free();
 $result->close();
 $mysqli->close();
 exit();
}


var obj = JSON.parse(data);

obj.forEach(function(current){
   console.log(currenr.fio);
});


Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
В начале строки вставлен символ с кодом 65279!

UPD: https://yadi.sk/i/nhntEiBTkLiFN
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 апр. 2024, в 00:48
35000 руб./за проект
17 апр. 2024, в 00:13
800 руб./за проект
17 апр. 2024, в 00:06
240000 руб./за проект