Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript本地与全局_Javascript_Jquery_Global Variables - Fatal编程技术网

Javascript本地与全局

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

我以为我已经把脑子里的这些乱七八糟的东西整理好了,但出于某种奇怪的原因,它不起作用

如果您在函数/作用域之外声明变量,并在函数内部引用它而不使用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);

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

您使用的是一个jax请求

另外指定的unkess为Asynchronous:它们在后台执行,不会停止脚本其余部分的执行

因此,在Ajax请求完成之前执行最后一行代码上的
警报
;也就是说,
price
在当时仍然是0

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

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

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


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

您是否在馈送给$.get的函数中定义了价格变量?@meder:回调函数就在代码中。。。不,没有额外的声明。这是否回答了您的问题?奇怪的直到稍后的If和For循环(基本上是一大堆行)出现,我才真正使用price变量。但到那时,我想它还没有做出决定。如果我只是更改为post,它会像预期的那样工作吗?不会。post和GET仍然是异步的