Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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
Javascript ajax jquery json返回500个内部服务器错误(未定义),但webmethod有效_Javascript_Jquery_Json_Undefined_Webmethod - Fatal编程技术网

Javascript ajax jquery json返回500个内部服务器错误(未定义),但webmethod有效

Javascript ajax jquery json返回500个内部服务器错误(未定义),但webmethod有效,javascript,jquery,json,undefined,webmethod,Javascript,Jquery,Json,Undefined,Webmethod,我不熟悉jquery和json,我试图弄清楚为什么getAreas()函数返回500/内部服务器错误-未定义。我检查了WebMethod,它返回数据,getRegions()函数工作正常。VS项目构建得很好。有什么想法吗?代码如下: 服务器端 [WebMethod] public static ArrayList GetRegionsArrayList() { ArrayList arrayList = new ArrayList(); foreach (DataRow dr i

我不熟悉jquery和json,我试图弄清楚为什么getAreas()函数返回500/内部服务器错误-未定义。我检查了WebMethod,它返回数据,getRegions()函数工作正常。VS项目构建得很好。有什么想法吗?代码如下:

服务器端

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

函数PopulateControl(列表,控件){
如果(list.length>0){
控制。移除警报(“禁用”);
control.empty().append('请选择');
$。每个(列表、函数(){
control.append($(“”).val(此['Value']).html(此['Text']);
});
}否则{
control.empty().append('notavailable');
}
}
函数getRegions(){
$.ajax({
类型:“POST”,
url:“Demo.aspx/GetRegionArrayList”,
数据:“{}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:OnRegionsPopulated,
错误:函数(响应){
警报(response.status+''+response.statusText);
},
故障:功能(响应){
警报(response.d);
}
});
}
函数getAreas(){
$.ajax({
类型:“POST”,
url:“Demo.aspx/getAreasaryList”,
数据:“{Dot4:'+$('#').val()+'}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:无人居住,
错误:函数(响应){
警报(response.status+''+response.statusText);
},
故障:功能(响应){
警报(response.d);
}
});
}
函数onRegionSpluded(响应){
PopulateControl(response.d,$(“#”);
}
重新填充的功能(响应){
PopulateControl(response.d,$(“#”);
}
控制

<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位于 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 上下文,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) 我在将JSON参数构建到web方法的客户端javascript中遇到了一个问题。在这种情况下,服务器返回一个“500内部服务器错误”,我发现它有误导性,并且坦率地说是不正确的。这不是内部服务器错误,而是错误的客户端请求


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

500表示服务器端出现问题服务器错误的详细信息是什么?我测试了web方法,该方法返回数据。基本上,这些是级联下拉列表。调用getRegions()的方法工作得很好它返回undefined。我不知道如何提取更具体的错误消息。查看浏览器开发工具中的net请求,您可以看到响应和错误的详细信息。只是一个侧节点(与您描述的错误无关):$.ajax()没有“失败”回调。“成功”和“错误”是您想要使用的两个。或者,您可以使用“complete”来捕获这两种情况。