JSON.stringify не работает в IE - PullRequest
3 голосов
/ 16 ноября 2011

Я использовал следующий метод:

JSON.stringify(json,null,2);

Это производит вывод с вкладками во всех браузерах, кроме IE: в IE он отображает одну строку.Является ли проблема null и если да, то каковы альтернативы?

Ответы [ 6 ]

5 голосов
/ 17 декабря 2012

Вы можете использовать jquery.min.js или последнюю версию или версию 1.8.2 и поместить это в элемент <head>:

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

. Он работает в IE8 и выше.

3 голосов
/ 25 апреля 2013

Один правильный тип документа для IE8, поддерживающий его:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3 голосов
/ 14 мая 2012

Хорошо. Возможно, это не совсем решение вашей проблемы, но может помочь другим, приходящим сюда:

Да, как упоминал Лыча, это поддерживается в IE8 и выше.

Итак, если вы все еще получаете ошибку «JSON undefined», это должна быть проблема «DOCTYPE».

Следовательно, укажите правильный DOCTYPE (и желательно, чтобы ваш документ содержал допустимый формат xhtml (т. е. теги и т. д.)) ..) и все должно работать нормально.

Не говоря уже о (правильном) DOCTYPE обычно создает много проблем с CSS в IE, и в этом случае JSON тоже.

-

(IE === 'плохо')

2 голосов
/ 21 февраля 2014

Могут быть ситуации, когда может быть невозможно включить Doctype или метатег, или ничего не будет работать, как в моем случае, поэтому мне пришлось разобраться следующим образом, как объяснено.

Чтобы отправить объекты json обратно на сервер, необходимо будет поддерживать json.strinfy. Чтобы поддержать то же самое в IE, пожалуйста, скачайте json2.js с https://github.com/douglascrockford/JSON-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;
}
2 голосов
/ 16 ноября 2011

Взглянув на документацию MSDN , похоже, что Internet Explorer ожидает либо функцию, либо объект для второго аргумента, в противном случае он вызывает исключение.

Вы можете попробовать использовать undefined вместо null. Например:

JSON.stringify(json,undefined,2)
1 голос
/ 17 января 2014
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...