asp.net jquery ajax调用无效的JSON问题

时间:2011-06-27 11:17:22

标签: asp.net json jquery

使用asp.net jquery ajax调用无效的JSON问题

您好,

当我将其激活到页面时,我在接收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”(在ajax调用的Firebug响应选项卡中)。虽然这是一个简单的ajax电话。

我有点困惑为什么这个maay会发生,因为它适用于大多数情况并且在其他情况下失败。

任何想法都会有很大的帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

你有很多抛出异常语句。

其中任何一个都会触发无效的Json响应!

您需要捕获错误消息而不是抛出异常,返回一些有效的Json来指示问题。

另外,对于调试我建议使用安装了HttpFox的Firefox - 然后您可以分析任何响应的确切内容,无论是否通过Ajax。我觉得这对于像这样的情况来说是一个非常宝贵的免费工具。

答案 1 :(得分:0)

这是因为Firefox 3.6存在一些奇怪的问题。我重新启动浏览器并再次测试它,事情按预期工作。