Не могу понять как убрать синтаксическую ошибку
Добрый день, есть такой код
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, время: 03:40. |