Asp.net mvc ASP.NET MVC—处理无返回对象的ajax操作的正确方法
我有一个控制器操作,它在数据库中执行一些工作,然后在完成后退出。此操作通过jQuery的ajax函数调用,数据类型设置为“json” 如果我将操作的返回类型设置为void,那么一切都会正常运行,除了Firefox会在控制台中显示一个错误:“找不到元素” 如果Firefox希望XML返回,它会抛出这个错误,这是有道理的。然而,即使我将ajax调用的dataType属性更改为“text”,我仍然会收到错误。为了消除返回类型void的错误,我必须将响应的ContentType设置为“text/html”。或者我可以将返回类型设置为JsonResult,并返回一个新的[empty]JsonResult对象 我确信有几种方法可以消除这个错误,但我想知道如何正确处理通过ajax调用无返回值的操作 如果重要的话,我也在使用异步控制器动作模式Asp.net mvc ASP.NET MVC—处理无返回对象的ajax操作的正确方法,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我有一个控制器操作,它在数据库中执行一些工作,然后在完成后退出。此操作通过jQuery的ajax函数调用,数据类型设置为“json” 如果我将操作的返回类型设置为void,那么一切都会正常运行,除了Firefox会在控制台中显示一个错误:“找不到元素” 如果Firefox希望XML返回,它会抛出这个错误,这是有道理的。然而,即使我将ajax调用的dataType属性更改为“text”,我仍然会收到错误。为了消除返回类型void的错误,我必须将响应的ContentType设置为“text/html
public void DoSomethingAsync(SomeJsonObjectForModelBinding model)
{
// do some database things
}
public void DoSomethingCompleted()
{
// nothing to do...
// what should my return type be?
// do I need to set the content type here?
}
我知道这并不能完全回答您的问题,但我认为您应该始终从AJAX或web服务调用返回一个返回值。即使只是告诉您操作成功,或者以其他方式将错误(消息)返回给您 我经常这样定义一个类:
public class JsonResultData
{
private bool _success = true;
public bool Success
{
get { return _success; }
set { _success = value; }
}
public object Value { get; set; }
public List<string> Errors { get; set; }
public JsonResultData()
{
this.Errors = new List<string>();
}
}
由于我的声誉,我不能发表评论,但我仍然想为澄清我的回答中的困惑做出贡献 在一个应用程序中,我捕获了ActionMethod中的所有异常,设置了一个HttpStatusCode,并在响应中添加了一条错误消息。我在Ajax错误函数中提取了消息,并将其显示给用户 在将应用程序放在登台服务器上之前,一切都进行得很顺利,登台服务器的某些设置不允许在错误响应中返回消息。相反,传输了一些标准Html,导致处理响应时出现JS错误 最后,我不得不重写所有异常处理,将应用程序错误返回为成功的Ajax调用(实际上是这样),然后在Ajax success函数中有所不同,这是应该的
您应该不要混用系统级和应用程序级反馈。您可能无法按照应用程序需要的方式控制系统级反馈。+1对于始终返回成功或错误,就js的工作方式而言,这是非常必要的。我看不出这能给您带来什么。无论如何,服务器都会返回http状态。您提倡将json序列化数据jpassing到客户端,即使您知道它永远不会被读取。重点是什么?有系统级反馈,还有应用程序级反馈。您可以成功地执行AJAX,但不知道应用程序中的服务器端是否出了问题。200响应不够吗?同样,我认为这是一个系统级与应用程序级反馈的问题。
return new JsonResult {
Data = new JsonResultData { Value = returnValue, Success = true }
};