【发布时间】:2012-03-16 16:26:39
【问题描述】:
我是 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 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串 输入,Int32 depthLimit,JavaScriptSerializer 序列化程序)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化程序、字符串输入、类型类型、Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](字符串 输入)\r\n 在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext 上下文,JavaScriptSerializer 序列化程序)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData 方法数据,HttpContext 上下文)\r\n 在 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文,WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
【问题讨论】:
-
500 表示服务器端有问题
-
服务器错误的详细信息是什么?
-
我测试了web方法,方法返回数据。基本上,这些是级联下拉列表。调用 getRegions() 的那个工作得很好。 - 它返回未定义。我不知道如何提取更具体的错误消息。
-
在浏览器开发者工具中查看net request,可以看到响应和报错详情。
-
只是一个侧面节点(与您描述的错误无关): $.ajax() 没有“失败”回调。 “成功”和“错误”是您要使用的两个。或者,您可以使用“完成”来捕获这两种情况。
标签: javascript jquery json undefined webmethod