使用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会发生,因为它适用于大多数情况并且在其他情况下失败。
任何想法都会有很大的帮助。
谢谢!
答案 0 :(得分:0)
你有很多抛出异常语句。
其中任何一个都会触发无效的Json响应!
您需要捕获错误消息而不是抛出异常,返回一些有效的Json来指示问题。
另外,对于调试我建议使用安装了HttpFox的Firefox - 然后您可以分析任何响应的确切内容,无论是否通过Ajax。我觉得这对于像这样的情况来说是一个非常宝贵的免费工具。
答案 1 :(得分:0)
这是因为Firefox 3.6存在一些奇怪的问题。我重新启动浏览器并再次测试它,事情按预期工作。