Проблема с удалением/заменой символов и кодов символов в строке

#javascript #node.js #json #ejs

Вопрос:

Я хочу передать объект dataO из Node.js/Express/EJS на сторону клиента. итак, на стороне узла JS тег скрипта :

 var dataO =  {"first":[20000, 14000, 12000, 15000, 18000, 19000, 22000], "second":[12000, 11000, 18000, 12000, 19000, 14000, 26000]};
var dataP = JSON.stringify(dataO);
app.get("/", function(req, res){
    res.render("index", {sStatus, dataP});
  }); 
 

и пытаюсь JSON.parse на стороне клиента:

 var dataX =  JSON.parse("<%= dataP %>");
 

Но на стороне клиента я получил ошибку: Неперехваченная синтаксическая ошибка: Неожиданный токен amp; в JSON в позиции 1
и dataP значение равно : "{amp;#34;firstamp;#34;:[20000,14000,12000,15000,18000,19000,22000],amp;#34;secondamp;#34;:[12000,11000,18000,12000,19000,14000,26000]}"
Я удалил amp;#34 , но все равно получил ту же ошибку.

Где эти какашки, ребята? Спасибо

Комментарии:

1. В <script> теге вы не можете/не должны использовать escape-символы html-сущности. Единственное, что вам нужно, чтобы сбежать оттуда, это </script> . Также старайтесь не выдавать строку JSON (которая вам понадобится для экранирования js-строки) и не анализировать ее на клиенте, а просто сразу же выдавать литерал объекта JS. Как это сделать, смотрите в документах ejs.

Ответ №1:

Я решил эту проблему. Проблема заключалась в том, что я пытался отправить данные напрямую клиенту, что во многих отношениях неправильно, мне пришлось использовать XMLHttpRequest , поэтому я просто решил этот пример:

Код клиента:

 $("#myBtn").click( function () {
    console.log("Button Pressed");
    var xhttp = new XMLHttpRequest();
    var params = "123";

    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 amp;amp; this.status == 200) {
            console.log(this.responseText); //And this catch sent JSON from Server.
        }
    };

    xhttp.open('POST', './data', true);
    xhttp.send(); //can sent anything from here to Server!
    
});
 

И код на стороне Nodejs таков:

 const express = require('express');
const app = express();
var ejs = require('ejs');
var bodyParser = require('body-parser');

app.set('views' , './views')
app.set('view engine' , 'ejs')

app.use(bodyParser.urlencoded({extended: true}));
app.set("view engine", "ejs");

var dataX =  {"first":[20000, 14000, 12000, 15000, 18000, 19000, 22000], "second":[12000, 11000, 18000, 12000, 19000, 14000, 26000]};

app.get("/", function(req, res){
    res.render("index");
  }); 

  app.post("/data", function(req,res){
    console.log("render pushed");
    res.json(dataX); //pass data to client, just remember don't make any other callbacks.
  })

  app.listen(3200 , () => console.log('Listening on port 3200'))
 

Это все. Проблемы для начинающих 😉