我对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]对我来说没什么用。
答案 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);
}
在这方面, Javascript
与C#
不同。所有参数本质上都是可选的,您还可以传递多于函数签名所需的参数。