0

可能重复:
Ajax 中的异步是什么意思?

为什么我的 var "temp" 在 ajax 之后是 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 调用是异步的,但您可以使用CommonJS Promises/A 模式来实现您想要的。jQuery 提供了它自己的实现:jQuery.Deferred().

于 2012-07-24T14:40:28.497 回答
0

正如其他人在这里提到的那样,因为 ajax 是异步的,所以不能保证在 return 语句之前获得更新的 temp 变量。最好在您的成功职能范围内工作。但是,如果您绝对必须等待该调用完成并返回 temp 变量,您可以通过添加使其成为非异步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调用是异步的,所以在更新之前就返回了temp...

于 2012-07-24T14:33:55.660 回答
0

因为在服务器返回 HTTP 响应之前,成功函数不会运行。

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 回答