Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC—处理无返回对象的ajax操作的正确方法_Asp.net Mvc_Jquery - Fatal编程技术网

Asp.net mvc ASP.NET MVC—处理无返回对象的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

我有一个控制器操作,它在数据库中执行一些工作,然后在完成后退出。此操作通过jQuery的ajax函数调用,数据类型设置为“json”

如果我将操作的返回类型设置为void,那么一切都会正常运行,除了Firefox会在控制台中显示一个错误:“找不到元素”

如果Firefox希望XML返回,它会抛出这个错误,这是有道理的。然而,即使我将ajax调用的dataType属性更改为“text”,我仍然会收到错误。为了消除返回类型void的错误,我必须将响应的ContentType设置为“text/html”。或者我可以将返回类型设置为JsonResult,并返回一个新的[empty]JsonResult对象

我确信有几种方法可以消除这个错误,但我想知道如何正确处理通过ajax调用无返回值的操作

如果重要的话,我也在使用异步控制器动作模式

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 }
           };