Javascript 正确发送后如何重置JSON?
我正在尝试建立一个基本的单页网络商店(产品图片,Javascript 正确发送后如何重置JSON?,javascript,json,websocket,Javascript,Json,Websocket,我正在尝试建立一个基本的单页网络商店(产品图片,onclick=“addtocart()”和一个按钮“购买”onclick=“buyprem()”)。 在buy上,JSON通过Websocket发送到我的Java应用程序。 购买后,我想重置表示订单的JSON,但每当我这样做时,就会发送默认的JSON json = { products: [], composite: false, premium: false, } i = 0; function addtocart(n
onclick=“addtocart()”
和一个按钮“购买”onclick=“buyprem()”
)。
在buy上,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是产品名称)最好:
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
(在JS中,
json
是一个指针)您的函数buyprem()
使用assync命令,这就是原因。