正确发送后如何重置 JSON?
Posted
技术标签:
【中文标题】正确发送后如何重置 JSON?【英文标题】:How to reset JSON after send correctly? 【发布时间】:2019-09-14 16:35:59 【问题描述】:我正在尝试建立一个基本的单页网上商店(产品图片,onclick = "addtocart()"
和一个“购买”按钮onclick="buyprem()"
。
购买时,JSON 通过 Websocket 发送到我的 Java 应用程序。
购买后,我想重置代表订单的JSON
。但是每当我这样做时,都会发送默认的JSON
。
json =
products: [],
composite: false,
premium: false,
i = 0;
function addtocart(name)
setTimeout(function()
var elem = document.getElementById(name);
elem.innerhtml = "";
, 2000);
document.getElementById(name).innerHTML = i;
json.products[i] = name;
i = i + 1;
function buyprem()
json.premium = true;
var websocket = new WebSocket("ws://localhost:4444");
console.log(JSON.stringify(json))
websocket.onopen = () =>
websocket.send(JSON.stringify(json));
//--------------------------
json =
products: [],
composite: false,
premium: false,
i = 0;
//--------------------------
websocket.close;
当我注释掉标记的部分时,一切正常,Java 得到正确的JSON
。
但是当我以这种方式重置json
变量时,Java 得到:
Message from client: "products":[],"composite":false,"premium":false
(标记代码注释掉:
Message from client: "products":["dog","donatello","twitch"],"composite":false,"premium":true
其中 dog、donatello 和 twitch 是产品的名称)
【问题讨论】:
你的函数buyprem()
使用 assync 命令,这就是原因。
【参考方案1】:
更好的做法:
function buyprem()
json.premium = true
let StrJSON = JSON.stringify(json)
json.products.length = 0
json.composite = false
json.premium = false
i = 0
var websocket = new WebSocket("ws://localhost:4444");
console.log(StrJSON)
websocket.onopen = () =>
websocket.send(StrJSON);
//--------------------------
websocket.close();
因为
json =
products: [],
composite: false,
premium: false,
i = 0;
为json
使用new内存(在JS中,json
是一个指针)
【讨论】:
以上是关于正确发送后如何重置 JSON?的主要内容,如果未能解决你的问题,请参考以下文章