#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'))
Это все. Проблемы для начинающих 😉