2012-03-16 60 views
0

我是新來jquery和json,我試圖找出爲什麼getAreas()函數返回500 /內部服務器錯誤 - 未定義。我檢查了WebMethod,它返回的數據和getRegions()函數工作得很好。 VS項目構建得很好。有任何想法嗎?代碼如下:ajax jquery json返回500內部服務器錯誤(未定義),但webmethod工程

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 at 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 serializer,String input,Type type,Int32 depthLimit)\ r \ n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](String input)\ r \ n at 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」}

+2

500意味着服務器端有問題 – Rafay 2012-03-16 16:31:23

+0

服務器錯誤的詳細信息是什麼? – Paul 2012-03-16 16:32:45

+0

我測試了web方法並返回數據。基本上,這些是級聯下拉列表。調用getRegions()的方法工作得很好。 - 它返回undefined。我不知道如何提取更具體的錯誤信息。 – xizwyck 2012-03-16 16:32:46

回答

0

這是遲到了,但它可以幫助一些旅客。 ..我也發現,使用XML可以很好地處理JSON的Web方法可能會導致「內部服務器錯誤」。

在我所有的情況下,這可以歸結爲下列之一。

1)我的班上有一個問題需要序列化。 我使用[XmlIgnore]從XML序列化中排除的東西在JSON中引起問題(如循環引用)。我用[ScriptIgnore]屬性修復了這個問題。

2)我有一個客戶端JavaScript的問題,建立JSON參數到Web方法。在這種情況下,服務器返回一個「500內部服務器錯誤」,我發現這個錯誤令人誤解,坦率地說是錯誤的。這不是內部服務器錯誤,而是錯誤的客戶端請求。

查看上面的問題代碼可能只是「Dot4」需要用引號引起來(它與錯誤消息的狀態完全一樣是「無效的JSON基元」)。但是,由於錯誤消息提供了「內部服務器錯誤」,因此您需要在漫長的旅程中尋找服務器中的問題,而不是客戶端。

相關問題