Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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
在jquery ajax中捕获错误消息-来自asp.net mvc操作_Asp.net_Asp.net Mvc 3_Jquery - Fatal编程技术网

在jquery ajax中捕获错误消息-来自asp.net mvc操作

在jquery ajax中捕获错误消息-来自asp.net mvc操作,asp.net,asp.net-mvc-3,jquery,Asp.net,Asp.net Mvc 3,Jquery,在使用jQueryAjax+asp.NETWeb服务之前,我能够获得实际的错误消息。但是,jquery$ajax错误中的相同代码不再有效 在我的.js中,我有 $.ajax({ contentType: 'application/json, charset=utf-8', type: "POST", url: "/Controller/DoSomething", data: JSON.stringify({ varname: var

在使用jQueryAjax+asp.NETWeb服务之前,我能够获得实际的错误消息。但是,jquery$ajax错误中的相同代码不再有效

在我的.js中,我有

$.ajax({
        contentType: 'application/json, charset=utf-8',
        type: "POST",
        url: "/Controller/DoSomething",
        data: JSON.stringify({ varname: varvalue }),
        cache: false,
        dataType: "json",

        success: function (wo) { 
           alert('yay!');
        },


        error: function (xhr) {

            alert('error');

            if (xhr.responseText) {

                var err = JSON.parse(xhr.responseText);

                if (err) {
                    alert(err.Message);
                }
                else {
                    alert("Unknown server error, please try again!");
                }
            } 

        }

    });
我的控制器里有

   public JsonResult DoSomething(string folderno)
   {
       CustomObject obj;

       //get the obj value from repository here
       throw new Exception("my test error message");
       return Json(obj);
   }
我看了看萤火虫,似乎我正在 “JSON.parse:意外字符”错误。

我在这里试图做的是,当从存储库获取obj抛出异常时,假装出现这种情况。显然,
returnjson(obj)
永远无法到达

我的问题是,我如何处理这种情况并在JS端捕获错误消息?我需要在控制器中执行某些操作吗

在我之前的Jquery+asp.NETWeb服务设置中,我可以在我的web服务方法中抛出一个异常(如我现在的操作所示),它将被困在我的ajax错误中,错误消息将被解析出来


现在,我似乎需要抓住这个例外,把自己打包……问题是怎么做?我需要在每个动作中都这样做吗?这似乎需要做很多工作。

我要做的一件事是为AJAX调用创建一个通用返回对象。 比如:

public class AJAXReturn
{
    public string Message { get; set; }
    public object Result { get; set; }
}
public JsonResult DoSomething(string folderno)
{
   CustomObject obj = new { FolderNo = folderno };
   AJAXReturn result;

   try
   {
       result.Message = "OK";
       result.Result = obj;
   }
   catch (Exception ex)
   {
       result.Message = "ERROR";
       result.Result = ex;
   }
   finally
   {
       return Json(result);
   }
}
然后在返回函数中,将它们包装在异常(或创建一个通用异常处理程序)中,该异常处理程序的外观如下:

public class AJAXReturn
{
    public string Message { get; set; }
    public object Result { get; set; }
}
public JsonResult DoSomething(string folderno)
{
   CustomObject obj = new { FolderNo = folderno };
   AJAXReturn result;

   try
   {
       result.Message = "OK";
       result.Result = obj;
   }
   catch (Exception ex)
   {
       result.Message = "ERROR";
       result.Result = ex;
   }
   finally
   {
       return Json(result);
   }
}
编辑:在javascript端,只需检查结果中的
data.Message==“OK”
。如果不正常,您可以显示特定的异常信息或任何您想要的信息


编辑2:对不起,我应该提到,这将始终在
success
回调中返回,因此请确保在那里对其进行分析。

请参阅此处的问题,了解我最后的操作