jQuery ajax调用未设置变量';s值
我对ajax进行了jquery调用jQuery ajax调用未设置变量';s值,jquery,ajax,variables,Jquery,Ajax,Variables,我对ajax进行了jquery调用 function findTaxForProcess(argPrc, argPrcAmount, argPrcDiscount) { if (argPrc == '') { return 0; }; var _valToReturn; if ($('#hdnTaxBefore').val() == "true") { // if tax is calcul
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
),但问题是第二个警报,第二个警报显示,未定义???FTW?黑客出了什么问题?这件事我已经搞了两天了,但什么都没有
为什么第二次警报时未定义\u valToReturn
的值?首先定义了什么?有什么帮助吗
编辑:警报到达此处
在第一次警报之后执行。所以,正如(几乎!)所有回答者所说的,如果它出现在前面,那么它将是未定义的,我知道,但正如我所说的,它是在之后而不是之前执行的。Ajax是一个异步请求。在执行成功事件时,警报“未定义”将已执行。到那时变量还没有初始化
更新:
在回答你的问题时,仔细观察,我相信
匿名函数将valToReturn视为局部变量。因此,如果您愿意,这些变量位于不同的“堆栈”上
见此:
或
与您的类似。尝试初始化\u valtoreReturn
值以除去未定义的如果第二个警报先出现,即如果未定义的警报先出现,然后是值,那么这是因为ajax的异步调用。要克服这个问题,可以使ajax调用同步
如果第二个警报出现在第一个警报之后,那么可能是变量值的问题。您可以尝试使用console.log来查找哪个警报是首先执行的,在我看来,带有“come here”的警报应该是首先执行的,只需查看firebug或chrome console即可。如果确实是这样,为什么警报是警报(来到这里+_valToReturn
)总是在第一次警报后执行???