我以为我把这个烂摊子整理在我脑海中,但由于一些奇怪的原因它无法正常工作。
如果在函数/作用域之外声明一个变量并且在函数内部没有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);
答案 0 :(得分:8)
您正在使用 A jax请求。
其他指定的unkess是 A 同步:它们在后台执行,而不会停止执行其余的脚本。
因此,最后一行代码的alert
在Ajax请求完成之前执行;这意味着当时price
仍为0。
改变这种方法的一种方法是使用同步请求(参见async option);但我强烈建议不要这样做;引用文档:
默认情况下,发送所有请求 异步(即设置为true) 默认情况下)。如果你需要同步 请求,将此选项设置为false。 请注意,同步请求可能 暂时锁定浏览器, 禁用任何操作时 请求已激活。
你肯定不希望你的应用程序冻结整个浏览器!
您应该重新考虑应用程序的设计方式,在这种情况下:您只能在Ajax请求完成后使用“价格”信息 - 这可能意味着您应该在其调用的函数中放置更多代码成功:仅在$.get
之后放置代码是不够的。
答案 1 :(得分:3)
使用.get的httprequests是异步的,因此第一个警报(第二个声明的警报)将警告原始值,因为请求的回调尚未触发。