【问题标题】:Issue on remove/replace symbols and character codes in String关于删除/替换字符串中的符号和字符代码的问题
【发布时间】:2021-07-11 21:08:50
【问题描述】:

我想将对象 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 %>");

但是在客户端我得到了错误:Uncaught SyntaxError: Unexpected token & in JSON at position 1dataP 值为:"{&amp;#34;first&amp;#34;:[20000,14000,12000,15000,18000,19000,22000],&amp;#34;second&amp;#34;:[12000,11000,18000,12000,19000,14000,26000]}" 我删除了&amp;#34,但仍然出现同样的错误。

那些便便的家伙在哪里? 谢谢

【问题讨论】:

  • &lt;script&gt; 标记中,您不能/不应该 html-entity-escape 字符。你唯一需要逃离的就是&lt;/script&gt;。也尽量不要发出一个 JSON 字符串(你需要 js-string-escape)并在客户端解析它,而只是立即发出一个 JS 对象文字。请参阅 ejs 文档了解如何执行此操作。

标签: javascript node.js json ejs


【解决方案1】:

我解决了这个问题。问题是我试图直接向客户端发送数据,这在很多方面都是错误的,我不得不使用XMLHttpRequest,所以我只是用这个例子来解决:

客户代码:

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

    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && 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'))

就是这样。初学者问题;-)

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多