繁体   English   中英

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#服务器端

[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>

错误详细信息:

在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()处为{“ Message”:“无效的JSON原语:Dot4。”,“ StackTrace”:“在System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal( Int32深度)\\ r \\ n在System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串输入,Int32 depthLimit,JavaScriptSerializer序列化器)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化器,字符串输入,类型类型,Int32 depthLimit)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串输入)\\ r \\ n在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context) ,JavaScriptSerializer序列化程序)\\ r \\ n(位于System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext上下文))\\ r \\ n位于System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData methodData) )“,” ExceptionType“:” System.ArgumentException“}

这很晚了,但是可能对某些旅行者有帮助...我也已经发现,与XML配合使用的Web方法在以JSON处理时可能会显示“内部服务器错误”。

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

1)我的课程被序列化时遇到问题。 我使用[XmlIgnore]排除在XML序列化之外的东西给JSON提供了问题(例如循环引用)。 我使用[ScriptIgnore]属性修复了此问题。

2)我在客户端javascript中有一个问题,该问题将JSON参数构建到web方法中。 在这种情况下,服务器返回“ 500 Internal Server Error”,我发现这具有误导性并且坦率地说是不正确的。 这不是内部服务器错误,而是格式错误的客户端请求。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM