2

これが私の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スクリプトが実行された後、totalCountに対して常に0を取得しますか? なぜこうなった?私は何をすべきか?ASP.NET MVC 3のHtml.TextBoxForにtotalCountを指定したいので、totalCountが必要です。助けてください。

4

4 に答える 4

3

ajax 呼び出しは非同期であり、「TotalCost」テキスト ボックスに値を設定しても完了していません。

于 2012-11-05T20:52:53.433 に答える
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);

1 行目で ajax 呼び出しが発生しますが、応答を待たずに 2 行目がすぐに実行されます。その後、サーバーが応答した後、successコールバック関数が実行されます。そして、2行目以降に実行されます。そのため、合計値が間違っていtotalCostます。TotalCost 入力を更新すると、正しい値が設定されます。

于 2012-11-05T21:00:27.137 に答える
1

投稿が非同期で、ページに対してグローバルな js 変数を設定しようとしているためです。変数を設定する関数を作成し、コールバックから呼び出すと、結果が表示されます。

于 2012-11-05T20:53:26.860 に答える
1

これは、非同期 ajaxリクエストが原因です。

イベントが処理されるまでに、リクエストはまだ完了していません。

AJAX の素晴らしい世界へようこそ。

于 2012-11-05T20:53:37.267 に答える