AJAX在新窗口中打开而不是返回页面

时间:2014-02-26 12:47:32

标签: jquery ajax asp.net-mvc

我有一个AJAX请求,一旦得到响应,就会转到带有结果的空白页面而不是转到方法中的成功函数。

jQuery看起来像这样:

$(document).ready(function ($) {
    $("form.AjaxSubmit").submit(function (event) {
        event.preventDefault();

        var $form = $(this);

        var url = $form.attr('action');
        var data = $form.serialize();

        $.ajax({
            type: "POST",
            dataType: "json",
            url: url,
            data: data,
            timeout: 60000,
            tryCount: 0,
            retryLimit: 3,
            success: function (data) {
                alert("success");
            },
            error: function (httpRequest, textStatus, errorThrown) {
                alert("Error");
            }
        });
        return false;
    });

});

控制器如下所示:

[HttpPost]
    public JsonResult SaveUserDetails(SingleUserModel model)
    {
        int UserResult = 1;

        using (var ctx = new DEVUSEntities())
        {
            SqlParameter pUserNum = new SqlParameter("@UserNum", model.UserNum);
            SqlParameter pFirstName = new SqlParameter("@FirstName", model.FirstName);
            SqlParameter pSurname = new SqlParameter("@Surname", model.Surname);
            SqlParameter pJobNum = new SqlParameter("@JobNum", model.JobTitleNum);
            SqlParameter pExt = new SqlParameter("@Extension", model.Ext);
            SqlParameter pLoginId = new SqlParameter("@LoginID", model.UserId);
            SqlParameter pSectionNum = new SqlParameter("@SectionNum", model.SectionId);
            SqlParameter pOldSectionNum = new SqlParameter("@OldSectionNum", model.OldSectionId);
            SqlParameter pOldLoginId = new SqlParameter("@OldLoginId", model.OldUserId);

            UserResult = ctx.Database.ExecuteSqlCommand("update_user_details_u @UserNum, @FirstName, @Surname, @JobNum, @Extension, @LoginID, @SectionNum, @OldSectionNum, @OldLoginId", pUserNum, pFirstName, pSurname, pJobNum, pExt, pLoginId, pSectionNum, pOldSectionNum, pOldLoginId);
        }

        return Json(UserResult);
    }

表单是带有敲除绑定的标准表单。

我引用了以下脚本:

<script src="/Scripts/jquery-2.0.3.js"></script>
<script src="/Scripts/knockout-2.1.0.debug.js"></script>

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

我已经休息一下,使用Firebug查看它是否达到了成功或错误,但事实并非如此。实际上它似乎转到控制器然后直接去了Json结果的空白页面。

有人能帮助我吗?

提前致谢。

编辑:根据要求,Url的值。

表格是:

<form action="@Url.Action("SaveUserDetails", "AJAXUser")" method="post" class="AjaxSubmit" id="userDetailsForm">

当我调试它实际上没有抓住中断但是如果我设法通过早期破坏得到它并且它是/ AJAXUser / SaveUserDetails这很好。

EDIT2:我注意到存储过程中控制器正在调用它具有以下内容:

IF @@TRANCOUNT > 0
    ROLLBACK

RETURN -1

-1是返回的结果。问题是问题?

编辑3:

好的,如果我在.ready之后直接发出警报,然后在页面加载它就会触发。

我也在.submit事件后发出警报,显然没有发射。

当我点击提交按钮时,两个警报都不会触发。

1 个答案:

答案 0 :(得分:1)

从我能得到的,你的事件没有被输入由于某种原因(无论是表格是AJAX还是在解析jQuery之后创建。为了解决这两个问题,我建议你改变你的事件声明以下

jQuery(function ($) {
    $(document).on("submit", "form.AjaxSubmit", function (event) {
        event.preventDefault();

        var $form = $(this);

        var url = $form.attr('action');
        var data = $form.serialize();

        $.ajax({
            type: "POST",
            dataType: "json",
            url: url,
            data: data,
            timeout: 60000,
            tryCount: 0,
            retryLimit: 3,
            success: function (data) {
                alert("success");
            },
            error: function (httpRequest, textStatus, errorThrown) {
                alert("Error");
            }
        });
    });
});

它将确保所有表单无论它们是如何创建的都将触发事件。