5

有人能告诉我是什么原因导致$.ajax 'POST'请求导致完整的回发(整页刷新)吗?

我在ASP.NET MVC上下文中使用 $.ajax 'POST',其中视图通过 $.ajax 'POST' 请求调用控制器方法(返回 JSON 结果)。

代码如下。


// View.
<button id="save" onclick="saveClick()" />

// View.
<script type="text/javascript">

    function saveClick() {
        if (!$("form").valid()) {
            return false;
        }

        $.ajax({
            url: '@Url.Action(@MVC.Ticket.ActionNames.SaveTicket, @MVC.Ticket.Name)'
            type: 'POST',
            data: JSON.stringify(getJsonTicket()),
            dataType: 'json',
            contentType: "application/json",
            cache: false,
            success: function(data) {
                alert(data.SaveResult);
            }
        });

        return true;
    }

    function getJsonTicket() {
        ...
    }

</script>

// Controller action.
public virtual JsonResult SaveTicket(Ticket newTicket)
{
    try
    {
        TicketManager.SaveTicket(newTicket);
        return Json(new CreateTicketViewModel {SaveResult = "success"});
    }
    catch
    {
        return Json(new CreateTicketViewModel { SaveResult = "error" });
    }
}
4

3 回答 3

11

<button id="save" type="button" onclick="saveClick()" />

确保此按钮未发布表单。

解释:

按钮元素的 type 属性的默认值为“submit”。

https://stackoverflow.com/a/3315016/1014281

于 2013-01-10T09:04:30.507 回答
3

你确定你使用的是 a<button>而不是<input type="submit">?因为如果您不阻止按钮提交,它将提交表单(完整回发)。

<input type="submit" onclick="return saveClick()">只要saveClick()始终返回 false 就应该可以工作。

于 2013-01-10T09:10:03.290 回答
0

你必须添加type="button"到你的button标签

于 2016-08-30T06:55:20.523 回答