jquery函数中var的范围?

时间:2012-07-24 14:32:58

标签: javascript jquery ajax

  

可能重复:
  What does Asynchronous means in 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;
        }

5 个答案:

答案 0 :(得分:0)

因为ajax调用是异步的,所以在更新之前返回temp ...

答案 1 :(得分:0)

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

Ajax是异步的。

您要对成功功能中的数据(或您从中调用的功能)执行操作。

不要试图等待响应,然后将数据返回到调用函数。

答案 2 :(得分:0)

Ajax调用是异步的,但您可以使用CommonJS Promises/A pattern来实现您想要的效果。 jQuery提供了它自己的实现:jQuery.Deferred()

答案 3 :(得分: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;
    }

答案 4 :(得分:0)

S.ajax / $ .post / $。get etc等,所有这些都是异步过程(这意味着,即使在完成$ .ajax之前,你也会走出循环,即使它会转到服务器端在退出循环之后)

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

因此,如果您要检查循环之后,可能没有执行以下语句(取决于数据集)。     temp = parseFloat(myJSONObject.bindings [0] .value);

因此要检查temp变量中的数据,您应该在$ .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的值