0

重複の可能性:
Ajax で非同期とはどういう意味ですか?

ajax の後で var "temp" が 0 になるのはなぜですか?

function calc7() {
            var temp = 0;
            $.ajax({
                type: "POST",
                url: 'Helpers/CalcResult7.ashx',
                data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
                success: function (data) {
                    list1 = eval(data);
                    temp = parseFloat(myJSONObject.bindings[0].value);
                    $("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
                }
            });
            return temp;
        }
4

5 に答える 5

0

他の人がここで述べたように、ajax は非同期であるため、return ステートメントの前に更新された一時変数を取得できる保証はありません。成功関数内で作業するのが最善です。ただし、その呼び出しが終了して一時変数を返すのを絶対に待たなければならない場合は、追加して非非同期にすることができますasync: false

function calc7() {
        var temp = 0;
        $.ajax({
            type: "POST",
            url: 'Helpers/CalcResult7.ashx',
            data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
            async: false,
            success: function (data) {
                list1 = eval(data);
                temp = parseFloat(myJSONObject.bindings[0].value);
                $("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
            }
        });
        return temp;
    }
于 2012-07-24T14:46:32.003 に答える
0

Ajax 呼び出しは非同期ですが、CommonJS Promises/A パターンを使用して目的を達成できます。jQuery はそれの独自の実装を提供します: jQuery.Deferred().

于 2012-07-24T14:40:28.497 に答える
0

ajax 呼び出しは非同期なので、temp は更新される前に返されます...

于 2012-07-24T14:33:55.660 に答える
0

HTTP 応答がサーバーから返されるまで、success 関数は実行されないためです。

Ajax は非同期です。

成功関数 (またはそれから呼び出す関数) でデータに対してやりたいことを行います。

応答を待ってから、呼び出し元の関数にデータを返そうとしないでください。

于 2012-07-24T14:33:57.323 に答える
0

S.ajax/$.post/$.get など、これらはすべて非同期処理です (つまり、$.ajax が完了する前にループから抜け出しますが、出てきた後にサーバー側に行くことになります)ループの)

function calc7() {
            var temp = 0;
            $.ajax({
                type: "POST",
                .............
                  ..............
                }
            });
            return temp;
        }

したがって、ループの直後に確認すると、次のステートメントが実行されていない可能性があります (データセットによって異なります)。temp = parseFloat(myJSONObject.bindings[0].value);

したがって、一時変数のデータをチェックするには、$.ajax 内にデバッガー/アラートを配置する必要があります。例 :

function calc7() {
            var temp = 0;
            $.ajax({
                type: "POST",
                url: 'Helpers/CalcResult7.ashx',
                data: { GU_ID: '<%=Request.QueryString["GUID"] %>' },
                success: function (data) {
                    list1 = eval(data);
                    temp = parseFloat(myJSONObject.bindings[0].value);
alert(temp);
                    $("#<%=ProResult7.GetSpanId %>").text(addCommas(temp));
                }
            });
            return temp;
        }

これでtempの値が得られます

于 2012-07-24T14:59:35.587 に答える