Jquery 未填充故障数据时的Ajax开始表单
我的页面上有以下Ajax助手Jquery 未填充故障数据时的Ajax开始表单,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,我的页面上有以下Ajax助手 @using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess(data)", OnFailure = "AccountActivateFailure(data)" }, new { id = "searchForm" })) 以及下面的JS函数 function AccountActivateSu
@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess(data)", OnFailure = "AccountActivateFailure(data)" }, new { id = "searchForm" }))
以及下面的JS函数
function AccountActivateSuccess(data) {
console.log('account activate success');
console.log(data);
//do stuff with information in data
}
function AccountActivateFailure(data) {
console.log('account activate failure');
console.log(data);
//do stuff with information in data
}
控制器的响应如下:
[HttpPost]
public ActionResult Activate(MyModel model)
{
try
{
//something spectacular
return Json(new {success = true});
}
catch (Exception e)
{
return Json(new {success = false, message = e});
}
}
当没有抛出错误时,就会填充“data”变量,我甚至可以在其中放入一个message属性,并在响应中获取该属性的句柄
但是,当抛出异常时,我会得到以下控制台错误:
VM34:3未捕获引用错误:未定义数据
它甚至连控制台的日志都没有
给出了什么?删除表单定义中回调的“(数据)”参数:
@using (Ajax.BeginForm("Activate", null, new AjaxOptions { HttpMethod = "POST", OnSuccess = "AccountActivateSuccess", OnFailure = "AccountActivateFailure" }, new { id = "searchForm" }))
另外,请确认回调javascript函数的作用域是全局的。问题实际上是我需要执行
e.ToString()代码>来自我的控制器。同样让人困惑的是,我希望AccountActivateFailure
函数能够运行,但即使出现异常,它也在Try-Catch内,因此它被放入accountactivatesucces
函数中,而我并没有在这里设置错误消息
这是一个内部应用程序,因此页面上显示的服务器信息没有问题。用户需要确切地知道出了什么问题,这就是本系统的要点。异常处理程序中的返回Json行是否会引发异常?也许它无法序列化整个异常。尝试用e.message替换e。通常,在响应中返回异常数据不是一个好的安全策略。这可能会无意中将可用信息泄露给黑客,如文件路径、数据库信息等。相反,让应用程序失败并发生异常,让客户端向用户显示一般错误消息,并让应用程序将所有异常记录到服务器上的Windows事件日志中(在更高级别,例如使用异常筛选器)。但是,要解决即时问题,请写入AccountActivateSuccess(数据)在表单中,配置没有任何意义。您应该提供要运行的函数的名称。该函数的定义将接受数据参数作为输入。您没有任何要传递的数据。AJAX代码调用函数并传递一些数据,这不是您的工作-您只需告诉它要调用哪个函数即可。