Недопустимая проблема JSON с вызовом ajax asqu.net jquery - PullRequest
0 голосов
/ 27 июня 2011

Недопустимая проблема JSON при вызове asp.net jquery ajax

Привет

Я сталкиваюсь со странной проблемой при получении ответа на вызов ajax, когда запускаю его на страницу. Я использую jquery для публикации данных в коде

Javascript -

var jsonData = { "a": JSON.stringify(obj1),"b": JSON.stringify(obj2)};
jsonData = JSON.stringify(jsonData);

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: 'Page.aspx/AjaxCall',
    async: true, cache: true, data: jsonData, dataType: "json",
    success: function (msg) {
        alert('hurray! Success. ' + msg.d);
    },
    error: function (xhr, textstatus, errorThrown) {
        alert('there was an error' + errorThrown);
    }
});

C #

[WebMethod]
public static string AjaxCall(string a, string b)
{
    Dictionary<object, Dictionary<string, object>> x = new Dictionary<object, Dictionary<string, object>>();
    Dictionary<string, object> z = new Dictionary<string, object>();
    Dictionary<object, object> y = new Dictionary<object, object>();
    int u = 0;
    int v = 0;

    // deserialise z class
    try
    {
        if (!string.IsNullOrEmpty(b))
        {
            z = (Dictionary<string, object>)new JavaScriptSerializer().Deserialize(b, typeof(Dictionary<string, object>));

            if (z.ContainsKey("IsProctored"))
                y.Add("BlurCount", z["BlurCount"]);

            if (z.ContainsKey("IsCrossClicked"))
            {
                y.Add("IsCrossClicked", z["IsCrossClicked"]);               
            }
        }
    }
    catch (InvalidOperationException ioe)
    {
        throw new Exception();
    }

    // deserialise items class
    try
    {
        x = (Dictionary<object, Dictionary<string, object>>)
        new JavaScriptSerializer().Deserialize(a, typeof(Dictionary<object, Dictionary<string, object>>));
    }
    catch (InvalidOperationException ioe)
    {
        throw new Exception();
    }

    if (u == 0)
    {
        throw new Exception();
    }

    if (v == 0)
    {
        throw new Exception();
    }

    if (x.Count == 0)
    {
        //throw new Exception();
    }

    try
    {
        // saves the data in backend
        SaveResponse(u, v, x, y);
    }
    catch (Exception ex)
    {
        throw new Exception();
    }

    return "response fired";
}

Я получаю сообщение об ошибке «Неверный JSON» (на вкладке ответа Firebug вызова ajax). Хотя это простой вызов ajax.

Я немного растерялся, почему это может происходить, потому что это работает в большинстве случаев и не работает в некоторых других.

Любая идея будет очень полезна.

спасибо!

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Это было из-за какой-то странной проблемы с Firefox 3.6. Я перезапустил браузер и снова протестировал его, и все заработало как положено.

0 голосов
/ 27 июня 2011

У вас там много операторов исключения типа throw.

Любой из них вызовет неверный ответ Json!

Вам нужно перехватывать сообщения об ошибках и вместо того, чтобы выдавать исключение, вернуть допустимый Json, чтобы указать на проблему.

Также для отладки я предлагаю использовать Firefox с установленным HttpFox - тогда вы сможете анализировать точное содержание любых ответов, как Ajax, так и нет. Я считаю его бесценным и бесплатным инструментом для подобных ситуаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...