Неперехваченная синтаксическая ошибка: Неожиданный конец ввода JSON в JSON.parse () в XMLHttpRequest.r.onreadystatechange (приложение.js:115)

#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 в систему, чтобы узнать, с чем вы имеете дело