2011-11-16 73 views
3
工作

我已经使用了以下方法:JSON.stringify不IE

JSON.stringify(json,null,2); 

这产生在所有浏览器选项卡式输出除外IE:在IE中,它显示单行。是null的问题,如果是的话有什么选择?

+1

什么版本的IE浏览器您使用的是什么样的?从IE8向上支持'stringify':http://blogs.msdn.com/b/ie/archive/2008/09/10/native-json-in-ie8。aspx – Lycha

+0

我的观众使用的更重要。我已经在IE7中测试过它。 –

回答

2

看看the MSDN documentation,它看起来像Internet Explorer期望一个函数或对象的第二个参数,否则它会引发异常。

您可以尝试使用undefined而不是null。例如:

JSON.stringify(json,undefined,2) 
+0

谢谢我尝试过。我想我可能只需要按照\ t,\ n,\ r逐行旋转 - 非常可怕! –

+0

你不必添加第三个参数,只是未定义就足够了:) ..感谢这个伟大的提示! –

3

好。这可能不是解决你的问题正是,但可能帮助别人来这里:

是的,作为Lycha提到的,这是支持IE8及以上。

因此,如果您仍然收到“JSON未定义”错误,则它必须是“DOCTYPE”问题。

因此,请提及适当的DOCTYPE(并且最好将您的文档保存为有效的xhtml格式(即,标签等)..),并且应该正常工作。

没有提及(正确)DOCTYPE通常在IE中创建了很多与CSS相关的问题,在这种情况下也是JSON。

-

(IE === '坏')

+0

谢谢,添加正确的DOCTYPE为我做了诀窍。刚刚救了我一个小时的谷歌搜索...;)+1 – Aletheios

4

可以使用jquery.min.js或最新的1.8.2或版本,并把这个在<head>元素:

<meta http-equiv="X-UA-Compatible" content="IE=8" /> 

它适用于IE8及以上版本。

3

一个正确的doctype IE8的支持,它是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
2

有可能是它可能无法包含的文档类型或元标记或没有可能在我的情况下工作,因为这样的情况我不得不按照解释的方式弄清楚这一点。

要将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对象相同,并且具有get和set。

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; 
} 
+0

伟大而聪明的答案。你说得对,我们不能添加Doctype或meta标签。 – Sunny