Ajax JQuery JSON возвращает 500 внутренняя ошибка сервера (не определено), но веб-метод работает - PullRequest
1 голос
/ 16 марта 2012

Я новичок в jquery и json и пытаюсь выяснить, почему функция getAreas () возвращает 500 / Internal Server Error - undefined.Я проверил 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>

Сведения об ошибке:

{"Сообщение": "Недопустимый примитив JSON: Dot4.", "StackTrace": "в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject () \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal (глубина Int32) \ r \ n в System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize (строковый ввод, Int32 deepLimit, сериализатор JavaScriptSerializer) \ r \ n в System.Web.Script.Serializer.JavaДесериализация (сериализатор JavaScriptSerializer, ввод String, тип Type, Int32 deepLimit) \ 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 "}

1 Ответ

0 голосов
/ 11 марта 2015

Это поздно, но это может помочь некоторым путешественникам ... Я также обнаружил, что веб-методы, которые прекрасно работают с XML, могут выдавать «Внутреннюю ошибку сервера» при обработке в формате JSON.

Во всех моих случаях это было до одного из следующих.

1) У меня проблема с сериализацией в моем классе. То, что я исключил из сериализации XML с использованием [XmlIgnore], вызывает проблемы в JSON (например, циклическая ссылка). Я исправляю это с помощью атрибута [ScriptIgnore].

2) У меня проблема с клиентским JavaScript, который встраивает параметры JSON в веб-метод. В этом случае сервер возвращает «500 Internal Server Error», которую я нахожу вводящей в заблуждение и откровенно неверной. Это не внутренняя ошибка сервера, а неправильно сформированный клиентский запрос.

Глядя на приведенный выше код, проблема, вероятно, заключается в том, что «Dot4» должен быть в кавычках (это «Недопустимый примитив JSON» в точности, как указано в сообщении об ошибке). Однако, поскольку в сообщении об ошибке указано «Внутренняя ошибка сервера», вы отправляетесь в дальний путь в поисках проблемы на сервере, а не на клиенте.

...