json结果有时会被截断
本文关键字:结果 json | 更新日期: 2023-09-27 18:02:14
我使用MVC 3,并有一个动作,返回一个JsonResult与187名值对(作为List<OrientationData>
),但经常从ajax调用收到的数据被截断,不能被解析。
这总是通过JsonResult返回相同的187项,所以如果它是一个长度问题,我认为它每次都会失败。下面是动作:
[HttpPost]
public JsonResult GetAllMetrics()
{
var metrics = metric.GetAllMetrics();
return Json(metrics);
}
这是jQuery ajax调用:
$.ajax({
url: urlGetAllMetrics,
type: 'POST',
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (ajaxData) {
if (ajaxData && ajaxData.length > 0) {
//populate data here
}
},
error: function (msg) {
alert(msg);
}
});
返回给ajax调用的结果有时被切断,看起来实际上在两个不同的地方被切断。可能的原因是什么?
我还想指出,当我使用Fiddler捕获流量时,它每次都可以工作,而不会截断返回的数据(我不知道为什么)。当我不使用Fiddler时,我经常在ajax中收到一个错误,因为它无法将字符串解析为json。数据是一个具有值和文本字符串属性的数组。返回的文本只是截断:
...,{"Value":"h12","Text":"h12 name goes here"},{"Val
由于maxJsonLength
属性的默认值(102400 - 100kb),它将被截断。试着在web.config中修改:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
我想不出这个问题的解决办法,所以……
我使用webHttpBinding添加了一个WCF服务,如对WCF的回答所示:maxStringContentLength总是设置为8192我在服务类上设置了以下属性:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
,并确保将DataContract和DataMember属性添加到底层类:
[DataContract]
public class OrientationData
{
[DataMember]
public string Value { get; set; }
[DataMember]
public string Text { get; set; }
}
我还切换了方法(现在在接口上有一个OperationContract):
public List<OrientationData> GetAllMetrics()
{
var metrics = metric.GetAllMetrics();
return metrics;
}
我希望我有一个更好的答案,但是如果其他人遇到这个问题,这是解决它的一种方法。当然,我敢打赌切换到MVC 4也会解决这个问题,正如David Murdoch在另一篇文章中提到的。