我正在使用MVC 3并且有一个操作返回一个带有187个名称值对的JsonResult(作为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
答案 0 :(得分:1)
由于maxJsonLength
属性的默认值(102400 - 100kb),它将被截断。尝试在web.config中更改它:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
答案 1 :(得分:0)
我无法弄清楚这个问题的解决方案,所以......
我使用webHttpBinding添加了一个WCF服务,如WCF: maxStringContentLength always set to 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也可以通过this answer在David Murdoch在另一篇文章中提到来修复它。