Javascript本地与全局
我以为我已经把脑子里的这些乱七八糟的东西整理好了,但出于某种奇怪的原因,它不起作用 如果您在函数/作用域之外声明变量,并在函数内部引用它而不使用var,那么它会更改之前声明的变量。。。对吧? 但是,第一个警报返回正确的价格,而第二个(最后一个)警报返回0。我做错了什么Javascript本地与全局,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,我以为我已经把脑子里的这些乱七八糟的东西整理好了,但出于某种奇怪的原因,它不起作用 如果您在函数/作用域之外声明变量,并在函数内部引用它而不使用var,那么它会更改之前声明的变量。。。对吧? 但是,第一个警报返回正确的价格,而第二个(最后一个)警报返回0。我做错了什么 //get pricing var price=0; var modelid = $("#model_input").val(); var inCode = $("#code_input").val(); $.get("getpr
//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);
使用.get的httprequests是异步的,因此第一个警报(声明的第二个警报)将向原始值发出警报,因为请求的回调尚未触发。您使用的是一个jax请求 另外指定的unkess为Asynchronous:它们在后台执行,不会停止脚本其余部分的执行 因此,在Ajax请求完成之前执行最后一行代码上的
警报
;也就是说,price
在当时仍然是0
一种改变的方法是使用同步请求(请参阅);但我强烈建议不要这样做;引用文件:
默认情况下,将发送所有请求
异步(即设置为true
默认情况下)。如果你需要同步
请求时,将此选项设置为false。
请注意,同步请求可能会
暂时锁定浏览器,
在运行时禁用任何操作
请求处于活动状态
你肯定不希望你的应用程序冻结整个浏览器
您应该重新考虑应用程序的设计方式,在这种情况下:您只能使用“价格”Ajax请求完成后的信息——这可能意味着您应该在成功调用的函数中放置更多代码:仅将代码放置在
$.get
之后是不够的。您是否在馈送给$.get的函数中定义了价格变量?@meder:回调函数就在代码中。。。不,没有额外的声明。这是否回答了您的问题?奇怪的直到稍后的If和For循环(基本上是一大堆行)出现,我才真正使用price变量。但到那时,我想它还没有做出决定。如果我只是更改为post,它会像预期的那样工作吗?不会。post和GET仍然是异步的