繁体   English   中英

Javascript Local vs Global

[英]Javascript Local vs Global

我以为我把这个烂摊子整理在我脑海中,但由于一些奇怪的原因它不能正常工作。

如果在函数/作用域之外声明一个变量并在函数内部没有var的情况下引用它,那么它会改变先前声明的变量......对吗?

但是,第一个警报返回正确的价格,但第二个(最后一个)警报返回0.我做错了什么?

//get pricing
var price=0;
var modelid = $("#model_input").val();
var inCode = $("#code_input").val();
$.get("getpricing.php", {  'modelid': modelid ,'code' : inCode }, function(data){
    price = data;
    alert(price);
});
alert(price);

您正在使用A jax请求。

那些未指定 unkess是A同步的:它们在后台执行,而不会停止执行脚本的其余部分。

因此,在Ajax请求完成之前执行最后一行代码的alert ; 这意味着当时price仍为0。

改变的一种方法是使用同步请求(参见async选项 ); 但我强烈建议不要这样做; 引用文档:

默认情况下,所有请求都是异步发送的(默认情况下设置为true)。 如果需要同步请求,请将此选项设置为false。 请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。

而你肯定不希望你的应用程序冻结整个浏览器!

您应该重新考虑应用程序的设计方式,在这种情况下:您只能在Ajax请求完成后使用“价格”信息 - 这可能意味着您应该在成功调用函数中放置更多代码:just在$.get之后放置代码是不够的。

使用.get的httprequests是异步的,因此第一个警报(第二个声明的警报)将警告原始值,因为请求的回调尚未触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM