如何使用错误函数有效地调试mvc ajax调用?

时间:2015-10-20 19:41:30

标签: asp.net-mvc asp.net-ajax

我对MVC很新,我编写了一个函数来覆盖提交按钮上的默认事件,我会根据提交表单更新部分视图。它工作得很好。然后它就停止了工作。我唯一改变的是我为datepicker添加了一些webshim东西(IE 9)。我试着评论这个,什么都没有。我在ajax调用中放置了一个错误函数,果然,由于某种原因,调用失败了。以下是我的ajax电话:

<script>
    $(document).ready(function () {
        $("#DropDownForm").on("submit", function (event) {
            //Prevent default action on the drop down submit form
            event.preventDefault();
            var form = $(this);
            var Project = $('#ProjectDropDown').val();
            var Release = $('#ReleaseDropDown').val();
            //Instead run this function - find Release and update table
            $.ajax({
                url: form.attr("action"),
                //async: false,
                method: form.attr("method"),
                data: form.serialize(),
                error: function (exception) { alert(exception + "\n" + form.serialize() + "\n" + form.attr("action") + "\n" + form.attr("method")) }
            })
            .done(function (result) {
                $("#ReleaseTableBodyForm").empty();
                $("#ReleaseTableBodyForm").html(result +
                    '<br/><div><button style=\"text-align:center\">Submit</button></div>');
            });
        });
    });
</script>

它引用的表单:

@using (Html.BeginForm("LoadRelease", "Home", FormMethod.Post, new { id = "DropDownForm", style = "" }))
{
    @*Dropdowns*@
    <select id="BusinessAreaDropDown" name="BusinessArea" onchange="javascript: FillGenericProject(); FillProject(); FillReleases();" style="width: 11em;">
        @Html.Partial(@"Dropdowns\_BusinessArea", Model.ProjectViewModels);
    </select>
    <select id="GenericProjectDropDown" name="GenericProject" onchange="javascript: FillProject(); FillReleases();" style="width: 11em;"></select>
    <select id="ProjectDropDown" name="Project" style="width: 18em;" onchange="javascript: FillReleases();"></select>
    <select id="ReleaseDropDown" name="Release" style="width: 11em;"></select>
    <button type="submit" id="GoButton" style="visibility:hidden;">Go</button>
}  

直到最近一直非常愉快地调用的控制器(在HomeController.cs中)

    [HttpPost]
    public ActionResult LoadRelease(string Project, string Release)
    {
        var ProjectID = _ProblemReportsDB.ProjectMaps
             .Where(r => r.Project == Project)
             .Select(r => r.ID).FirstOrDefault();

        ViewBag.Project = Project;

        var Releases = from row in _ProblemReportsDB.PlannedOpenCloses
                       where (row.Project == ProjectID && (Release == null || row.Release == Release))
                       select row;

        return PartialView("_TableBody", Releases.ToList());
    }

我根本不知道如何调试ajax调用。

错误调用正在输出:

[object Object]
BusinessArea=Test1&GenericProject=Test2&Project=Test3&Release=Create+New+Release
/Home/LoadRelease
post

所有这些都是正确的。只是失败了。有什么方法可以从ajax错误参数中获取更多信息吗? [object Object]对我来说没什么用。

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以从ajax错误中获取更多信息   参数? [object Object]对我来说没什么用。

根据$.ajax

的文档
  

错误类型:函数(jqXHR jqXHR,String textStatus,String   errorThrown)

     

函数接收三个参数:jqXHR(在jQuery 1.4.x中,   XMLHttpRequest)对象,一个描述错误类型的字符串   发生了,并且发生了一个可选的异常对象。可能   第二个参数的值(除了null)是“超时”,“错误”,   “abort”和“parsererror”。

     

发生HTTP错误时,errorThrown   接收HTTP状态的文本部分,例如“未找到”   或“内部服务器错误”。从jQuery 1.5开始,错误设置可以   接受一系列功能。每个函数将依次调用。   注意:不会为跨域脚本调用此处理程序   跨域JSONP请求。这是一个Ajax事件。

所以你得到的[object]是jpXHR,它是底层XMLHttpRequest的jquery包装器。如果需要状态文本和错误消息,请将其他参数添加到错误回调:

error: function (xhr, textStatus, errorThrown) { 
      console.error(textStatus + "\n" + errorThrown); 
}
在这方面,

JavascriptC#不同。所有参数本质上都是可选的,您还可以传递多于函数签名所需的参数。