【问题标题】:Why is this value zero after ajax call finishes (asp.net mvc 3 and jQuery)?为什么在 ajax 调用完成后这个值为零(asp.net mvc 3 和 jQuery)?
【发布时间】:2012-11-05 20:48:37
【问题描述】:

这是我的 ajax 调用:

  var totalCost = 0;
    function GetTotalCost(start, end, rID) 
    {
        $.ajax({
            url: '@Url.Action("CalculateTotalcost")',
            type: 'POST',
            data: JSON.stringify({ start:start, end:end, rID:rID}),
            dataType: 'json',
            processdata: false,
            contentType: 'application/json; charset=utf-8',
            success: function (data) { totalCost = data; }
//            error: function (xhr, ajaxOptions, thrownError) { $('.datepicker1').datepicker("hide"); },
//            complete: function (x, y) { $('.datepicker1').datepicker("refresh"); }
        });
    }

这是我调用 ajax 的函数:

 $('.datepicker2').datepicker({
            dateFormat: 'dd/mm/yy',
            firstDay: 1,
            yearRange: '2012:2100',
            beforeShowDay: function (date) {
                var day = date.getDate();
                if (day in alreadyTakenDays) {
                    return [false, '', alreadyTakenDays[day]];
                }
                else return [true, 'IsActive'];
            },
            onChangeMonthYear: function (year, month, inst) {
                alreadyTakenDays = {};
                getEvents(month, year);
            },

            onSelect: function (dateText, inst) {
                var end = dateText.substring(0, 2);
                console.log(end);
                var rID = $('#RoomID').val();
                console.log(rID);
                var startingHole = $('#DateOne').val();
                var start = startingHole.substring(0, 2);
                console.log(start);
                GetTotalCost(start, end, rID);

                document.getElementById('TotalCost').value = totalCost.toFixed(2);

            }
        });

在执行 jQuery 脚本后,我总是得到 0 for totalCount? 为什么会这样?我该怎么办? 我想在 ASP.NET MVC 3 中将 totalCount 指定给 Html.TextBoxFor,这就是我需要 totalCount 的原因。请帮忙。

【问题讨论】:

    标签: c# jquery ajax asp.net-mvc-3


    【解决方案1】:

    当您在“TotalCost”文本框中设置值时,ajax 调用是异步调用并没有完成。

    【讨论】:

    • 如何纠正他的?你能帮帮我吗,我现在挣扎了几个小时
    【解决方案2】:

    你应该有这样的成功函数处理程序来获得正确的总成本值:

    function GetTotalCost(start, end, rID) 
        {
            $.ajax({
                url: '@Url.Action("CalculateTotalcost")',
                type: 'POST',
                data: JSON.stringify({ start:start, end:end, rID:rID}),
                dataType: 'json',
                processdata: false,
                contentType: 'application/json; charset=utf-8',
                success: function (data) { totalCost = data;
                                           document.getElementById('TotalCost').value = totalCost.toFixed(2); 
                                         }
            });
        }
    

    在这样的代码中:

    GetTotalCost(start, end, rID); 
    document.getElementById('TotalCost').value = totalCost.toFixed(2);
    

    第一行导致ajax调用,但它不等待响应,第二行立即执行。稍后,服务器响应后,执行success回调函数。它将在第二行之后执行。这就是您的总值错误的原因 - 在您更新 TotalCost 输入后,正确的值设置为 totalCost

    【讨论】:

    • 我添加了行 document.getElementById('TotalCost').value = totalCost.toFixed(2);在总成本 = 数据之后;但还是一样。我还应该做什么?谢谢
    • 尝试在totalCost = data;之前添加console.log(data),看看控制台显示什么(f12应该足以打开它,在FF你可能需要安装firebug)
    • 好的,这有效,所以我将其标记为解决方案,谢谢。
    【解决方案3】:

    因为您的帖子是异步的,并且您试图设置一个对页面全局的 js 变量。创建一个设置变量的函数并从回调中调用它,然后您将看到结果。

    【讨论】:

    • 我将把函数放在哪里?我完全是 jQuery 的初学者,谢谢
    【解决方案4】:

    那是因为异步ajax请求..

    到您处理事件时,请求尚未完成。

    欢迎来到 AJAX 的精彩世界。

    【讨论】:

    • @TunAntun FAngel 的解决方案是您需要修复它的方式。所有需要 totalcost 的代码都需要在成功回调中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多