【发布时间】:2020-03-25 08:23:07
【问题描述】:
在下面的函数中,我有这两个变量,size 和total,它们应该在整个函数块中都可以访问,但是当执行到达第三个if 时,它们呈现的值是@987654324 @:
function update_cart() {
var cart_size = document.getElementById('cart_size');
var cart_status = document.getElementById('cart_status');
var cart_total = document.getElementById('cart_total');
var size, total;
if(cart_size !== null) {
var cliente = cart_size.dataset.cliente;
var url = cart_size.dataset.url;
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
size = xhr.responseText;
cart_size.innerHTML = size;
if(size == 0)
cart_size.style.display = 'none';
else
cart_size.style.display = 'block';
}
};
var formData = new FormData();
formData.append("cliente", cliente);
xhr.send(formData);
}
if(cart_total !== null) {
var cliente = cart_total.dataset.cliente;
var url = cart_total.dataset.url;
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
total = xhr.responseText;
var currency = new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(total);
cart_total.innerHTML = currency;
}
};
var formData = new FormData();
formData.append("cliente", cliente);
xhr.send(formData);
}
if(cart_status !== null) {
switch(size) {
case 0:
cart_status.innerHTML = 'A cesta de compras está vazia.';
document.getElementById('table').style.display = 'none';
break;
case 1:
cart_status.innerHTML = size + ' produto adicionado na cesta, com valor ' + total;
document.getElementById('table').style.display = 'block';
break;
default:
cart_status.innerHTML = size + ' produtos adicionados na cesta, com valor ' + total;
document.getElementById('table').style.display = 'block';
break;
}
}
}
我已经尝试使用var 和let 声明它们,结果相同。在cart_status存在的页面中,cart_size和cart_total都存在。
任何人都可以提示如何解决这个问题?
【问题讨论】:
-
这两个变量是? cart_size 和 cart_total?
-
我不明白?你对什么它们是什么意思?
-
来吧,只要说明你说的两个变量是什么。
-
你似乎没有在我在代码中看到的任何地方给它们赋值。
-
我认为您的第三个
if()在您的请求完成之前正在执行。
标签: javascript scope var let