Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正确发送后如何重置JSON?_Javascript_Json_Websocket - Fatal编程技术网

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命令,这就是原因。