2

我以为我的脑子里已经解决了这个烂摊子,但出于某种奇怪的原因,它不起作用。

如果您在函数/范围之外声明一个变量并在函数内没有 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);
4

2 回答 2

8

您正在使用A jax 请求。

那些,unkess 否则指定,是A synchrounous :它们在后台执行,而不会停止脚本其余部分的执行。

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

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

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

而且您绝对不希望您的应用程序冻结整个浏览器!

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

于 2009-08-14T04:59:40.947 回答
3

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

于 2009-08-14T04:55:52.437 回答