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

时间:2012-03-16 16:26:40

标签: javascript jquery json undefined webmethod

我是jquery和json的新手,我正在试图找出为什么getAreas()函数返回500 /内部服务器错误 - 未定义。我检查了WebMethod,它返回数据,getRegions()函数运行正常。 VS项目建立得很好。有任何想法吗?代码如下:

C#服务器端

[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

<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%>"));
    }
</script>

控制

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

错误详情:

  

{“Message”:“无效的JSON原语:Dot4。”,“StackTrace”:“at   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject(个)\ r \ n   在   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(的Int32   深度)\ r \ n at   System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串   输入,Int32 depthLimit,JavaScriptSerializer序列化程序)\ r \ n at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer   serializer,String input,Type type,Int32 depthLimit)\ r \ n at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串   输入)\ r \ n at   System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext的   context,JavaScriptSerializer序列化程序)\ r \ n at   System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData   methodData,HttpContext context)\ r \ n at   System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext的   context,WebServiceMethodData   methodData)”, “ExceptionType”: “System.ArgumentException”}

1 个答案:

答案 0 :(得分:0)

这已经很晚了,但它可能会帮助一些旅行者...我也发现使用XML工作得很好的Web方法在处理为JSON时可能会出现“内部服务器错误”。

在我的所有情况下,这已经归结为以下之一。

1)我的课程序列化有问题。 我使用[XmlIgnore]从XML序列化中排除的东西在JSON中给出了问题(就像循环引用一样)。我用[ScriptIgnore]属性解决了这个问题。

2)我在客户端javascript中存在一个问题,即在Web方法中构建JSON参数。在这种情况下,服务器返回“500内部服务器错误”,我发现这是误导和坦率的错误。这不是内部服务器错误,而是错误形成的客户端请求。

查看上面的代码问题可能只是“Dot4”需要引号(它是一个“无效的JSON原语”,正如错误消息所述)。但是,由于错误消息显示“内部服务器错误”,因此您需要在漫长的旅程中开始寻找服务器而不是客户端的问题。