这是我作为新雇用的初级开发人员的第一个堆栈溢出问题。我已经做了很多搜索,但似乎找不到答案,如果我错过了,很抱歉。
我有几个大型JavaScript对象,我希望从Web应用程序的前端传递到C#后端。在我正在处理的应用程序中,我们一直在使用JSON.stringify(object)
来准备数据以传递到后端。当它击中后端时,我们做ApplyMyData data = JsonConvert.DeserializeObject<ApplyMyData>(json);
-通常没有问题。
编辑:这是我们发布的方式:
$.ajax({
type: 'POST',
url: '/Controller/MyMethod',
data: {
json: JSON.stringify(myObject)
},
success: function (response) {
if (response.success) {
// yay
} else if (response.success === false) {
// nay
} else {
alert('Something unexpected happened');
}
}
});
'为什么不继续使用JSON?"我听到你问!
好吧,这很棘手。由于客户需求,我们必须支持IE11,这似乎对字符串的大小有限制。参考:查询字符串的最大可能长度是多少?
因此,所得的JSON.stringify(object)
是不完整/无效的,当解析它时,会丢弃错误。当用户使用Chrome时,我们没有问题。
我已经做了一个快速的小提琴来证明这个问题,尝试在chrome和ie11中运行它,然后查看控制台日志,您会看到我得到的内容:https://jsfiddle.net/8yx7bqjs/。IE11以1024个字符的字符串长度截断...叹气...
所以我的问题:
- 是否有另一种方法可以将JavaScript对象发送给'未修改' -Or- '未经修复的'的方式?
- 必须以字符串的形式发送给后端的所有数据?
- 是否有IE11的解决方法可以让您使用超过1024个字符的字符串?我似乎找不到任何。
预先感谢。
您可以在小提琴中提出模拟Ajax请求。我很快看的是我看的东西:
https://jsfiddle.net/8yx7bqjs/1/
$.ajax({
type: 'POST',
url: '/echo/json',
data: {
"stuff": myArray
}
}).done(function(res){
console.log("success");
}).fail(function(res){
console.log("test failed")
});
IE11实际上发送数据没有任何问题。
根据字符串ASP.NET的实际长度,默认情况下的限制为102400。
谢谢@robjam,这对我有很大帮助。我正在使用Raygun进行错误报告,并为我提供了帖子表格值。形式值在其控制台中被截断,因此我认为(可能是错误的),该字符串在浏览器中被截断了,然后才能将其放到后端。
,但看起来IE11的弦乐很好,也许Raygun根本没有在其错误记录控制台中打印出所有的JSON,这使我脱离了气味。
将进一步调查,谢谢。