Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
jQuery ajax调用未设置变量';s值_Jquery_Ajax_Variables - Fatal编程技术网

jQuery ajax调用未设置变量';s值

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

我对ajax进行了jquery调用

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
)总是在第一次警报后执行???