从asmx方法返回的json无法在Javascript中解析

时间:2013-05-02 18:16:43

标签: .net jquery asmx

我正在尝试返回像这样的数组数组的json对象:

{
     'data': [[45,43,103],[34,43,230]]
}

在.NET 4.0中使用asmx,如下所示:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetData() {
StringBuilder sb = new StringBuilder();
sb.Append("'Data':[");
sb.Append("[45,43,103],");
sb.Append("[34,43,230]");
sb.Append("]");
return sb.ToString();

使用jQuery ajax调用:

$.ajax({
    type: "POST",
    url: url,  //defined elsewhere
    data: "{}",
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    success: update,  

  });

function update(data)
{
 console.log (data.d[1][1]); //looking at second array second element
}

问题是来自asmx调用的响应看起来像这样,我的更新功能不起作用

{"d":"\u0027Data\u0027:[[45,43,50],[34,43,50]]"}

看起来他们没有被正确转义或格式化。好像我错过了什么。为什么'数据'仍然有'unicode chars'?我认为ResponseFormat.Json会把所有内容都放在json格式中。

1 个答案:

答案 0 :(得分:1)

实际上你没有返回包含数组数组的json。您返回一个封装在json中的字符串('Data':[[45,43,50],[34,43,50]])。

你的方法有两个问题。

a)不使用字符串操作手动形成json

b)在您的方法中返回一个真实对象而不是字符串

因此,将您的方法更改为以下内容应该可以正常工作

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<int[]> GetData()
{
    return new List<int[]>() { new[] { 45, 43, 103 }, new[] { 34, 43, 230 } };
}