[英]jQuery ajax call not setting variable's value
我有这个jquery调用ajax,
function findTaxForProcess(argPrc, argPrcAmount, argPrcDiscount) {
if (argPrc == '') { return 0; };
var _valToReturn;
if ($('#hdnTaxBefore').val() == "true") {
// if tax is calculated before discount
$.ajax({
url: '/AutoComplete.asmx/FindProcessTax',
type: 'POST',
timeout: 5000,
datatype: 'xml',
cache: false,
data: 'argProcess=' + argPrc + '&argAmt=' + argPrcAmount,
success: function (response) {
_valToReturn = $(response).find('double').text();
alert(_valToReturn);
}
});
}
else {
// the tax is calculated after discount
$.ajax({
url: '/AutoComplete.asmx/FindProcessTaxAter',
type: 'POST',
timeout: 5000,
datatype: 'xml',
cache: false,
data: 'argProcess=' + argPrc + '&argAmt=' + argPrcAmount + '&argDiscount=' + argPrcDiscount,
success: function (response) {
_valToReturn = $(response).find('double').text();
alert(_valToReturn);
}
});
}
alert('came here ' + _valToReturn);
return _valToReturn;
};
问题是第一个警报显示2.873
(在其他情况下,它显示2.178
),但问题是第二个警报,第二个警报显示, came here undefined
??? FTW? 黑客出了什么问题? 我已经乱了2天,但没有!
为什么_valToReturn
的值在第二次警报时未定义? 并首先定义? 任何帮助?
编辑: 警报came here _valToReturn
在第一个警报后执行。 所以,就像(差不多!)所有的回答者说,如果它之前来了,它将是未定义的,我知道,但正如我所说它是在之前没有执行。
Ajax是一个异步请求。 到成功事件执行时,警报“来到这里未定义”将会执行。 并且该变量尚未被初始化。
更新:在仔细回答您的问题时,我相信匿名函数将valToReturn视为局部变量。 因此,如果你愿意,那些变量会在不同的“堆栈”上。
看到这个: Javascript匿名函数不更新全局变量
要么
与你的相似。
尝试初始化_valToReturn
值以摆脱undefined
如果第一个警报首先出现,那么如果首先是undefined,然后是值,那么这是因为ajax的异步调用。 要克服这一点,您可以使ajax调用同步。
如果第二个警报出现在第一个警报之后,那么它可能是变量值的问题。
您可以尝试使用console.log来查找首先执行的操作,在我看来,“来到这里”的警报应该先执行,然后去查看firebug或chrome console
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.