关于javascript:ajax jquery json返回500内部服务器错误(未定义),但webmethod工作

ajax jquery json returns 500 internal server error (undefined) but webmethod works

我刚接触过jquery和json,我想知道为什么getareas()函数返回500/内部服务器错误-未定义。我检查了webMethod,它正在返回数据,getRegions()函数工作正常。vs项目构建得很好。有什么想法吗?代码如下:

C服务器端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[WebMethod]
public static ArrayList GetRegionsArrayList()
{
    ArrayList arrayList = new ArrayList();
    foreach (DataRow dr in Utility.Regions().Rows)
    {
        arrayList.Add(new ListItem(dr["Region"].ToString(), dr["Dot4"].ToString()));
    }
    return arrayList;
}

[WebMethod]
public static ArrayList GetAreasArrayList(string Dot4)
{
    ArrayList arrayList = new ArrayList();
    foreach (DataRow dr in Utility.Areas(Dot4).Rows)
    {
        arrayList.Add(new ListItem(dr["Area"].ToString(), dr["Dot6"].ToString()));
    }
    return arrayList;
}

JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<script type="text/javascript" language="javascript">
    function PopulateControl(list, control) {
        if (list.length > 0) {
            control.removeAttr("disabled");
            control.empty().append('<option selected="selected" value="0">Please select</option>');
            $.each(list, function () {
               control.append($("<option></option>").val(this['Value']).html(this['Text']));
            });
        } else {
            control.empty().append('<option selected="selected" value="0">Not available<option>');
        }
    }

    function getRegions() {
        $.ajax({
            type:"POST",
            url:"Demo.aspx/GetRegionsArrayList",
            data:"{}",
            contentType:"application/json; charset=utf-8",
            dataType:"json",
            success: OnRegionsPopulated,
            error: function (response) {
                alert(response.status + ' ' + response.statusText);
            },
            failure: function (response) {
                alert(response.d);
            }
        });
    }

    function getAreas() {
        $.ajax({
            type:"POST",
            url:"Demo.aspx/GetAreasArrayList",
            data:"{Dot4: ' + $('#<%=DDL_Region.ClientID%>').val() + '}",
            contentType:"application/json; charset=utf-8",
            dataType:"json",
            success: OnAreasPopulated,
            error: function (response) {
                alert(response.status + ' ' + response.statusText);
            },
            failure: function (response) {
                alert(response.d);
            }
        });
    }

    function OnRegionsPopulated(response) {
        PopulateControl(response.d, $("#<%=DDL_Region.ClientID%>"));
    }

    function OnAreasPopulated(response) {
        PopulateControl(response.d, $("#<%=DDL_Area.ClientID%>"));
    }

控制

1
2
3
<select id="Select1" onchange="getRegions();">
<select id="DDL_Region" onchange="getAreas();" runat="server"></select>
<select id="DDL_Area" runat="server"></select>

错误详细信息:

{"Message":"Invalid JSON primitive: Dot4.","StackTrace":" at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()

at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32
depth)

at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String
input, Int32 depthLimit, JavaScriptSerializer serializer)

at
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer
serializer, String input, Type type, Int32 depthLimit)

at
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String
input)

at
System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext
context, JavaScriptSerializer serializer)

at
System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData
methodData, HttpContext context)

at
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext
context, WebServiceMethodData
methodData)","ExceptionType":"System.ArgumentException"}


这已经很晚了,但它可能会帮助一些旅行者……我也发现,使用XML工作正常的Web方法在作为JSON处理时可能会产生"内部服务器错误"。

在我的所有案例中,这都归结为以下其中之一。

1)我的类在序列化时出现问题。我使用[xmlignore]从XML序列化中排除的一些东西在JSON中产生了问题(比如循环引用)。我用[scriptIgnore]属性修复了这个问题。

2)在将JSON参数构建到Web方法中的客户端JavaScript中,我遇到了一个问题。在这种情况下,服务器返回一个"500内部服务器错误",我发现这是误导性的,并且坦率地说是不正确的。这不是内部服务器错误,而是错误的客户机请求。

查看上面的代码,问题可能只是"dot4"需要加引号(它是一个"无效的json原语",与错误消息的状态完全相同)。但是,由于错误消息给出了"内部服务器错误",所以您开始了一个漫长的旅程,寻找服务器中的问题,而不是客户机中的问题。