Javascript Local vs Global

时间:2009-08-14 04:52:38

标签: javascript jquery global-variables

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

如果在函数/作用域之外声明一个变量并且在函数内部没有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);

2 个答案:

答案 0 :(得分:8)

您正在使用 A jax请求。

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

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

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

  

默认情况下,发送所有请求   异步(即设置为true)   默认情况下)。如果你需要同步   请求,将此选项设置为false。   请注意,同步请求可能   暂时锁定浏览器,   禁用任何操作时   请求已激活。

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

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

答案 1 :(得分:3)

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