我使用了以下方法:
JSON.stringify(json,null,2);
这会在IE以外的所有浏览器中生成选项卡式输出:在IE中,它会显示一行。是null
问题,如果是,有什么替代方案?
答案 0 :(得分:5)
您可以使用jquery.min.js或最新版本或1.8.2版本并将其放在<head>
元素中:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
适用于IE8及以上版本。
答案 1 :(得分:3)
好的..这可能不是您问题的解决方案,但可能有助于其他人来到这里:
是的,正如Lycha所说,IE8及以上版本支持此功能。
因此,如果您仍然遇到“JSON undefined”错误,则必须是“DOCTYPE”问题。
因此,请提及正确的DOCTYPE(并且最好将您的文档保持为有效的xhtml格式(即标签等)..)并且事情应该可以正常工作。
不提及(正确)DOCTYPE通常会在IE中产生很多CSS问题,在这种情况下也会产生JSON问题。
-
(IE ==='bad')
答案 2 :(得分:3)
IE8支持它的一个正确的doctype是:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
答案 3 :(得分:2)
看一下the MSDN documentation,看起来Internet Explorer需要第二个参数的函数或对象,否则会引发异常。
您可以尝试使用undefined
代替null
。例如:
JSON.stringify(json,undefined,2)
答案 4 :(得分:2)
在某些情况下可能无法包含Doctype或meta标签,或者在我的情况下没有任何可能的工作方式,所以我必须按照解释的方式解决这个问题。
要将json对象发回服务器,必须支持json.strinfy。要在IE上支持相同功能,请从https://github.com/douglascrockford/JSON-js下载json2.js并在您的视图中查看。以下代码剪辑为我工作,我希望它也帮助其他人。
//include jquery library from your preferred cdn or local drive.
<!-- include json2.js only when you need JSON.stringfy method -->
<script type="text/javascript" src="~/scripts/json2.js"></script>
<script type="text/javascript">
function button_click() {
//object to post back to the server.
var postData = { "Id": $('#hfUserId').val(), "Name": $('#Name').text(),
"address": new Array() };
var address = new Array(); var addr;
addr = { "HouseNo": "1", "Street": "ABC", "City": "Chicago", "State": "IL" };
address[0] = addr;
addr = { "HouseNo": "2", "Street": "DEF", "City": "Hoffman Est", "State": "IL" };
address[1] = addr;
//make ajax call to server to save the data
$.ajax({
url: '@Url.Action("myAction", "MyController")',
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(postData),
async: true,
success: function (data) { alert('User Saved'); },
error: function (data) { alert('Could not save User'); }
});
}
</script>
地址列表的模型如下。请注意,属性名称与addr对象相同,并且已获取并设置。
public class Address
{
public string HouseNo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
控制器动作将如下所示
[HttpPost]
public ActionResult myAction(string Id, string Name, List<Address> address)
{
JsonResult result = null;
result = new JsonResult
{
Data = new
{
error = false,
message = "User Saved !"
}
};
return result;
}
答案 5 :(得分:1)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">