Не могу понять как убрать синтаксическую ошибку
Добрый день, есть такой код
let dollar = document.querySelector('#DOLLAR'), griv = document.querySelector('#GRIV'); dollar.addEventListener('input', function(e){ let server = new XMLHttpRequest(); server.open("GET", '../js/ajax/current.json'); server.setRequestHeader('Content-type','application/json; charset=utf-8'); server.send(); server.addEventListener('readystatechange', function(){ let t = JSON.parse(server.response); let val = e.target.value; griv.value = +val * t.dollar; }) }) Вот в этой строке let t = JSON.parse(server.response);выдает эту самую ошибку. Вот такой код файле json { "usd": 27 } Ошибка выглядит следующим образом "SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data" Сам скрипт работает но вылетает в консоль эта ошибка. Использую локальный сервер "open server". Каким образом исправить синтаксическую ошибку? спасибо |
Если до или после вывода в браузер json файла есть вывод еще чего либо, то на клиенте не будет валидного json.
|
Цитата:
|
Цитата:
"{\"dollar\":27}" |
alert(JSON.parse("{\"dollar\":27}")) Как видите ошибки нет, ибо это строка валидный json. Но можно не видеть того, что мешает, например файл сохранен в UTF (в какой кодировке в общем то и будет корректно работать json) и с BOM, который не видно, но который будет причиной ошибки. |
Цитата:
|
А если строчкой ранее, перед JSON.parse написать
alert(server.response.charCodeAt(0));то какое число выводит? (Должно 123?) Цитата:
И это произошло, поскольку событие readystatechange происходит несколько раз, где server.readyState имеет сл. значения... 0: запрос ещё не отправлен 1: соединение с сервером установлено 2: запрос принят 3: обработка запроса 4: запрос завершен и ответ готов Вы можете получить текст только на этапе №4... server.addEventListener('readystatechange', function() { if(server.readyState != 4 || server.status != 200) return; let t = JSON.parse(server.responseText); let val = e.target.value; griv.value = +val * t.dollar; }) |
Цитата:
Значит нет проблем на сервере, а проблема в обработчике, попробуйте вот так server.onload = () => { let t = JSON.parse(server.response); ... } вместо server.addEventListener('readystatechange', function(){ .... PS. Кстати, server.setRequestHeader('Content-type','application/json; charset=utf-8'); - без толку в данном случае. |
Цитата:
|
Цитата:
if(server.readyState != 4 || server.status != 200) return;ошибки нет! |
Часовой пояс GMT +3, время: 05:11. |