jQuery推迟了AJAX& 500个服务器错误

时间:2011-12-22 17:46:23

标签: javascript jquery asmx

试图弄清楚如何从我的.ASMX

调试泛型500错误

JS:

function TestError() {
    return $.ajax({
        type: "POST",
        url: 'Order.asmx/TestError',
        contentType: "application/json; charset=utf-8"
    });
}

$.when(TestError()).then(function (err) {
    console.log(err);
});

C#

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object TestError()
{
    try
    {
        throw new Exception("Testing error");
    }
    catch (Exception ex)
    {
        return ex;
    }
}

结果:

enter image description here

它甚至没有记录err参数。有什么想法吗?

修改

将错误添加到原始的Ajax调用是让我记录信息,但仍然是通用&无用的。

http://i42.tinypic.com/2v27fgo.jpg

enter image description here

修改2

回答了我自己的问题,并要求跟进:

Removing properties of an inherited object in C#

2 个答案:

答案 0 :(得分:1)

在向正确的方向踢了一脚并进一步挖掘后,我发现这个问题是双重的。

首先,Dave Ward实际上pointed me in the right direction建议我在web.config中关闭customErrors。实际上并非如此,但非常接近。

实际的罪魁祸首是Elmah错误处理模块。禁用后,我能够转发自定义错误,无论customErrorson还是off

第二个问题是虽然我现在可以处理错误,但仍然无法传递System.Exception个对象。我发现这是因为Exception.TargetSite属性不可序列化

我通过创建自己的JsonException类来解决这个问题,并且只包含System.Exception类的可序列化属性(为简单起见,这里省略)。

public class JsonException
{
    public string Source { get; set; }
    public string Message { get; set; }
    public string StackTrace { get; set; }

    public JsonException(Exception ex)
    {
        this.Source = ex.Source;
        this.Message = ex.Message;
        this.StackTrace = ex.StackTrace;
    }
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public object TestError()
{
    try
    {
        throw new Exception("Testing error");
    }
    catch (Exception ex)
    {
        return new JsonException(ex);
    }
}

现在我终于得到了我想要的数据:

enter image description here

答案 1 :(得分:0)

我会改为:

$.ajax({
        type: "POST",
        url: 'Order.asmx/TestError',
        contentType: "application/json; charset=utf-8",
        error: function (XMLHttpRequest,textStatus,errorThrown){ console.log(errorThrown); }
    });