JSON.stringify在IE中不起作用

时间:2011-11-16 11:33:15

标签: json internet-explorer

我使用了以下方法:

JSON.stringify(json,null,2);

这会在IE以外的所有浏览器中生成选项卡式输出:在IE中,它会显示一行。是null问题,如果是,有什么替代方案?

6 个答案:

答案 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">