[英]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.