在 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<Byte>();
编辑
由于您将文件内容作为 json 传递,我猜性能不是您主要关心的问题。 如果是这样,您可以使用下面的Linq(有副作用),它更短且不易出错
int cnt = 0;
List<List<byte>> chunks = fileBytes
.GroupBy(x => cnt++ / 1000)
.Select(x => x.ToList())
.ToList();
【讨论】:
以上是关于在 ajax 请求中获取不正确的 json 响应的主要内容,如果未能解决你的问题,请参考以下文章
Mapquest 的 JSON 响应不正确 - Android 应用