Почему javascript не анализирует эту строку? - PullRequest
0 голосов
/ 17 апреля 2020

Когда я передаю json закодированное значение из PHP в Javascript и просто консоль записываю его в журнал, он возвращает мне следующее:

{"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"}

Это строка, и когда я хочу ее проанализировать в Javascript возвращает ошибку:

eUncaught SyntaxError: Unexpected token  in JSON at position 0
at JSON.parse (<anonymous>)
at Object.success (welcome.js:11)
at c (jquery-3.4.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)
at l (jquery-3.4.1.min.js:2)
at XMLHttpRequest.<anonymous> (jquery-3.4.1.min.js:2)

Я не понимаю, почему javascript не может разобрать это.

Мой код PHP (извлечение из базы данных):

$sql = "SELECT * FROM serbian_values WHERE username = '$username'";
        $result = mysqli_query($link, $sql);
        if($result){
            while($row = mysqli_fetch_assoc($result)){
                $value[] = $row;
            }
            echo json_encode($value[0]); 
        }

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

A U+FEFF : ZERO WIDTH NO-BREAK SPACE [BOM] {BOM, ZWNBSP} - недопустимый символ для начала текста JSON.

Где-то он вставляется в начало вывода программы PHP (или смешивается перед синтаксическим анализом). в JS вы не показали нам, но это менее вероятно).

Возможно, это используется неправильным charset, появляющимся в заголовке Content-Type, который вы выводите из PHP, но персонаж, вероятно, где-то скрывается в исходном коде. Вероятно, это будет проще всего найти с помощью шестнадцатеричного редактора.

0 голосов
/ 17 апреля 2020

Еще один способ исправить этот первый символ спецификации,

function stripBOM(content) {
  content = content.toString()
  if (content.charCodeAt(0) === 0xFEFF) {
    content = content.slice(1)
  }
  return content
}

console.log(JSON.parse(stripBOM(obj)));

Ссылка https://gist.github.com/pbakondy/f5045eff725193dad9c7

0 голосов
/ 17 апреля 2020

JSON.parse может анализировать только string элементы. Одно из решений - сначала указать JSON:

JSON.parse(JSON.stringify({"id":"4","username":"muzikant346","coins":"675","avatar1":"1","avatar2":"0","avatar3":"0","avatar4":"0","avatar_selected":"0"}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...