在ajax请求中获取不正确的json响应

时间:2013-04-12 06:27:07

标签: c# jquery ajax json jsonp

我需要将大字节数组作为REST服务的响应发送到ajax请求。我正在创建列表:

List<List<Byte>> list = new List<List<byte>>(); 

这里,内部列表每个都有1000个字节。这是代码:

int cnt = 0;
List<Byte> innerList = new List<Byte>();

for (int i = 0; i < fileBytes.Length; i++)
{
    if (cnt < 1000)
    {
        Byte b = fileBytes[i];
        innerList.Add(b);
        cnt++;
        if (i == fileBytes.Length - 1)
        {
            list.Add(innerList);
                        log.Debug("Remaining:");
                        log.Debug("List: " + list.Count);
                        log.Debug("innerList: " + innerList.Count);
        }
    }
    else
    {
        list.Add(innerList);
                log.Debug("Remaining:");
                log.Debug("List: " + list.Count);
                log.Debug("innerList: " + innerList.Count);
        innerList.Clear();
        cnt = 0;
    }
}

return list;

现在,根据log,我的总计数为list为503,第一个502计数为1000(这将是innerList)&amp;在503'中,子列表包含54个字节。

这是我的ajax请求:

$.ajax({
                type: "GET",
                dataType: "jsonp",
                contentType: "jsonp", 
                data: dd,
                crossDomain: true,
                jsonp: "callback",
                url: "http://xxx.xxx.xxx.xx/MyWebService/WebService.svc/MyMethod",
                success: function (data) {
                    console.log(data);
                },
                complete: function (request, textStatus) { //for additional info
                    alert(request.responseText);
                    alert(textStatus);
                },
                error: function(request, textStatus, errorThrown) {
                    alert(textStatus);
                  }
            });

请求已成功完成,但在firebug我注意到,我data中的success503 jsons的集合,每个jsons都有54( !)键。我想我应该在1000&amp;的前502个jsons中获得data个密钥。只有在503'才能得到54把钥匙。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

因为你使用了innerList的相同实例,最后是54字节长。尝试创建新实例。

例如,尝试innerList.Clear();

,而不是innerList = new List<Byte>();

修改

由于您将文件内容作为json传递,我认为性能不是您主要关注的问题。 如果是这样,你可以使用下面的Linq(带副作用),这个更短,更不容易出错

int cnt = 0;
List<List<byte>> chunks = fileBytes
                            .GroupBy(x => cnt++ / 1000)
                            .Select(x => x.ToList())
                            .ToList();