0

私は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) ですが、問題は 2 番目のアラートであり、2 番目のアラートがcame here undefined???を表示することです ところで?ハックがうまくいかないのは何ですか?私はこれを2日間いじっていますが、何もありません!

_valToReturn2 回目のアラートで未定義の値が表示されるのはなぜですか? 最初に定義された?助けはありますか?

EDIT : アラートは最初のアラートのcame here _valToReturnに実行されています。したがって、(ほぼ!)すべての回答者が、それが前に来る場合は未定義であると言ったので、私はそれを知っていますが、私が言ったように、前ではなくに実行されています。

4

4 に答える 4

2

Ajax は非同期リクエストです。成功イベントが実行されるまでに、アラート「未定義に来ました」が実行されます。そして、変数はそれまでに初期化されていません。

更新:よく見ると、あなたの質問への回答として、匿名関数は valToReturn をローカル変数として認識していると思います。したがって、必要に応じて、これらの変数は別の「スタック」にあります。

これを参照してください: Javascript匿名関数がグローバル変数を更新していません

または

ajax コールバック関数の外部で変数を使用する

あなたに似ています。

于 2012-09-13T07:57:17.217 に答える
0

_valToReturn未定義を取り除くために値を初期化してみてください

于 2012-09-13T07:57:40.890 に答える
0

2 番目のアラートが最初に表示される場合、つまり undefined が最初に表示され、次に値が表示される場合は、ajax の非同期呼び出しが原因です。これを克服するには、ajax 呼び出しを同期化します。

最初のアラートの後に 2 番目のアラートが表示される場合は、変数の値に問題がある可能性があります。

于 2012-09-13T08:04:47.827 に答える
0

console.log を使用して、どちらが最初に実行されているかを見つけることができます。私の考えでは、「ここに来ました」というアラートが最初に実行されるはずです。ただ行って、firebug または chrome コンソールを見てください。

于 2012-09-13T08:08:59.587 に答える