#javascript #url #xmlhttprequest
Вопрос:
Я действительно заблудился прямо сейчас.
У меня возникла эта ошибка при загрузке моей веб-страницы.
Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at XMLHttpRequest.r.onreadystatechange (app.js:115)
Это код, в котором происходит сбой:
xmlhttp2.onreadystatechange = function () {
if (this.readyState == 4 amp;amp; this.status == 200) {
var dataURL = JSON.parse(this.responseText);
Console.log(этот.responsetext) дает:
[[{"Fecha":"2021-08-16T00:00:00.000Z","pm1":5,"pm2":8,"pm11":1}]]
Проблема в том, что в моей локальной системе вообще нет проблем, она работает просто отлично. И я не знаю, с чего начать, должен сказать, что при публикации все классы js объединяются в один класс, так что там может возникнуть проблема. Idk. Я искал эту ошибку, но, несмотря на то, что ее много, я не могу заставить ее работать
Ответ URL-адреса имеет следующий формат:
[
[
{
"fecha": "2021-09-09T11:40:36.157Z",
"pm1": 5,
"pm2": 8,
"pm10": 11
},
{
"fecha": "2021-09-09T11:39:20.157Z",
"pm1": 5,
"pm2": 6,
"pm10": 6
},
{
"fecha": "2021-09-09T11:38:29.873Z",
"pm1": 11,
"pm2": 14,
"pm10": 15
},
.
.
.
это остальная часть кода для контекста. Может быть, это и полезно.
window.onload = function () {
var xmlhttp2 = new XMLHttpRequest();
var url2 = "http://My.IP.Adress.real:port/api/grafico/datos/particulas/MedicionAire/2059E7";
xmlhttp2.open("GET", url2, true);
xmlhttp2.send();
xmlhttp2.onreadystatechange = function () {
if (this.readyState == 4 amp;amp; this.status == 200) {
var dataURL = JSON.parse(this.responseText);
var pm10 = dataURL.map(function (elemF) {
return elemF.map(function (o) { return { Fecha: o.Fecha, ValorMedicionPM10: o.ValorMedicionPM10 } })
});
var pm1 = dataURL.map(function (elemF) {
return elemF.map(function (o) { return { Fecha: o.Fecha, ValorMedicionPM1: o.ValorMedicionPM1 } })
});
var pm25 = dataURL.map(function (elemF) {
return elemF.map(function (o) { return { Fecha: o.Fecha, ValorMedicionPM25: o.ValorMedicionPM25 } })
});
const dataPointsPM2 = pm25[0].map(function(point) {
return {
label: point.Fecha,
y: point.ValorMedicionPM25,
}
})
const dataPointsPM1 = pm1[0].map(function (point) {
return {
label: point.Fecha,
y: point.ValorMedicionPM1,
}
})
const dataPointsPM10 = pm10[0].map(function (point) {
return {
label: point.Fecha,
y: point.ValorMedicionPM10,
}
})
var chart = new CanvasJS.Chart("chartPM", {
title: {
text: ""
},
zoomEnabled: true,
exportEnabled: true,
data: [
{
type: "line",
showInLegend: true,
legendText: "PM10",
dataPoints: dataPointsPM10
}, {
type: "line",
showInLegend: true,
legendText: "PM1",
dataPoints: dataPointsPM1
}, {
type: "line",
showInLegend: true,
legendText: "PM2.5",
dataPoints: dataPointsPM2
}
]
});
chart.render();
Комментарии:
1. Вы пробовали войти
this.responseText
в систему ? Ошибка утверждает, что JSON не завершен, поэтому часть может отсутствовать.2. @Ivar вот что дает этот.responseText: [[{«Fecha»: «2021-08-16T00:00:00.000 Z»,»pm1″:5,»pm2″:8,»pm11″:1}]]
3. @Ivar, проводя некоторые тесты, я выясняю, что если эта часть кода не используется, она выходит из строя… Я не понимаю.
4. Это звучит не очень логично. Если он выходит из строя, когда он не используется, то ошибка должна указывать на другое место, где произошла ошибка. Если он все еще брошен в эту строку, то либо номера строк трассировки стека не совпадают, либо отладчик работает неправильно. Использование
JSON.parse()
JSON, который вы только что предоставили, не должно приводить к каким-либо ошибкам .
Ответ №1:
Прошло много времени с тех пор, как я пользовался XMLHttpRequest
, но я думаю, что ты забыл позвонить раньше
xmlhttp2.responseType = 'json';
xmlhttp2.send();
чтобы XHR знал, что сервер будет возвращать JSON и что это должно быть преобразовано за кулисами в объект JavaScript MDN Web Docs
И если это все еще не работает, то, вероятно,
var dataURL = JSON.parse(this.responseText.response); // get the string from the response
И, как упоминает комментарий, попробуйте войти this.responseText
в систему, чтобы узнать, с чем вы имеете дело