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

Posted

技术标签:

【中文标题】在 ajax 请求中获取不正确的 json 响应【英文标题】:Getting incorrect json response in ajax request 【发布时间】:2013-04-04 13:50:24 【问题描述】:

我需要发送大字节数组作为 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)& 在第 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 中我注意到,我在success 中得到data 作为503 jsons 的集合,每个jsons 都有54(!) 键。我想我应该在data 的第一个502 jsons 中获得1000 键,并且只有在第 503 次我才应该获得 54 个键。我错过了什么吗?

【问题讨论】:

【参考方案1】:

因为您使用相同的 innerList 实例,它最后有 54 个字节长。尝试创建新实例。

例如,代替innerList.Clear();,试试innerList = new List&lt;Byte&gt;();


编辑

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

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

【讨论】:

以上是关于在 ajax 请求中获取不正确的 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

JSON 响应 Ajax 调用的正确状态代码?

我应该使用 JSON 还是 AJAX 作为响应数据?

如何从JQuery响应正确获取数据

Mapquest 的 JSON 响应不正确 - Android 应用

jquery ajax 后台响应成功,返回正确json但不执行success方法,执行error的问题

Spring MVC 学习笔记 --- [SpringMVC的数据响应(Ajax提交请求后,用JSON格式响应数据)]