除非我使用警报消息,否则我的js代码无法正常工作

时间:2013-08-13 20:32:35

标签: javascript jquery asp.net-mvc razor

我有一个输入字段:

    <input class="quantityInput" data-index="@table.Rows.IndexOf(row)"
 type="number" value="@row[col.ColumnName]" min="1"/>

这是我的js代码:

$(document).ready(function () {
    $(function () {
        $(document).on('change', '.quantityInput', function () {
            var data = {
                Id: $(this).data('index'),
                value: $(this).val()
            };
            $.getJSON("/Order/BasketSession/", data, function (result) { });
            location.reload(true);
            alert("hi!");
        });
    });

在我的控制器中:

public JsonResult BasketSession(int Id, int value)
        {
            (HttpContext.Session["basket"] as DataTable).Rows[Id][2] = value;

            return Json(true);
        }

如果我不使用alert,当我使用keybord更改输入字段的值但我的json func没有工作但是如果我使用鼠标单击增加或减少它会工作是alert还是不是(镀铬)

在Firefox中它根本不起作用

我希望你能理解我的问题

2 个答案:

答案 0 :(得分:2)

正如有人已经指出的那样,这是一个ajax调用,并没有立即解决。在没有深入细节的情况下,您可以使用done方法在getJSON返回数据时执行一些代码。

$(document).ready(function() {
    $(document).on('change', '.quantityInput', function () {
        var data = {
            Id: $(this).data('index'),
            value: $(this).val()
        };
        $.getJSON("/Order/BasketSession/", data).done(function(){
          location.reload(true);
          console.log("hi!");
        });
    });
});

这是有效的,因为getJSON会返回将来会发生的事件的承诺。您可以找到有关getJSON和承诺here的更多信息。

答案 1 :(得分:0)

这段代码对我有用:

 $(document).ready(function () {
    $(function () {
        $(document).on('change', '.quantityInput', function () {
            var data = {
                Id: $(this).data('index'),
                value: $(this).val()
            };
            var jqxhr = $.getJSON("/Order/BasketSession/", data, function () { });
            jqxhr.complete(function() { location.reload(true); });
        });
    });

感谢@danielepolencic链接到jQuery.getJSON()