jQuery ajax调用没有设置变量的值

时间:2012-09-13 07:54:06

标签: jquery ajax variables

我有这个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?黑客出了什么问题?我已经乱了两天但没什么了!

为什么_valToReturn的值在第二次警报时未定义?并首先定义?有什么帮助吗?

编辑: 警告came here _valToReturn正在执行 第一个警报。所以,就像(差不多!)所有的回答者说,如果它之前来了,它将是未定义的,我知道,但正如我所说它在之后执行

4 个答案:

答案 0 :(得分:2)

Ajax是一个异步请求。到成功事件执行时,警报“来到这里未定义”将会执行。而那时变量还没有被初始化。

更新: 我相信,仔细回答你的问题 匿名函数将valToReturn视为局部变量。因此,如果你愿意,那些变量会在不同的“堆栈”上。

看到这个: Javascript anonymous function not updating global variable

Using variable outside of ajax callback function

与你的相似。

答案 1 :(得分:0)

尝试初始化_valToReturn值以摆脱未定义的

答案 2 :(得分:0)

如果第一个警报首先出现,那就是如果首先是undefined,然后是值,那么这是因为ajax的异步调用。为了克服这个问题,你可以使ajax调用同步。

如果第二个警报出现在第一个警报之后,那么它可能是变量值的问题。

答案 3 :(得分:0)

您可以尝试使用console.log来查找首先执行的操作,在我看来,“来这里”的警报应该先执行,然后去查看firebug或chrome console