действительный json все еще терпит неудачу на IE с обратными вызовами ajax или getJSON jquery - PullRequest
2 голосов
/ 22 марта 2010

каждый раз, когда загружается моя страница, я должен создать datatable (также плагин jquery), но при извлечении содержимого использование .ajax или .getJSON всегда идет прямо к функции ошибок, даже не говоря мне, что пошло не так внутриобратный вызов

$.ajax({
    cache: false,
    type: "POST",
    url: oSettings.sAjaxSource,
    data: {'newdate' : date},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(json) {
        console.log('retrieving json data');
    },

    error: function() {
        console.log("An error has occurred. Please try again.");
    }
});

- это фактический код с обратным вызовом, убранным в целях безопасности ...

это прекрасно работает в firefox, который фактически выполняет то, что есть в функции обратного вызова, но IE просто отказывает и продолжаетчтобы написать свой журнал

Я много читал, что основная причина, по которой вызовы JSON не выполняются для IE, - это когда есть запятые или просто искаженный JS

, но я уже использовал JSONLint и проверил, что мойJSON-объект является допустимым: (

Ответы [ 2 ]

1 голос
/ 22 марта 2010

Поскольку вы устанавливаете contentType для application / json, я предполагаю, что вы вызываете ASMX ScriptService или метод страницы. В этом случае то, что предлагает Sky Sanders, является правильным. Вы должны предоставить параметр данных в виде строки JSON; в противном случае jQuery неправильно сериализует объект как пары ключ = значение и ключ = значение.

Однако следует помнить, что IE выдает ошибку, когда код JavaScript пытается использовать объект консоли, , если инструменты разработки (и я считаю, что консоль) не были открыты до код работает. Это часто является причиной проблем, связанных с IE, когда используется console.log.

1 голос
/ 22 марта 2010

Попробуйте это

 data: '{"newdate" : "' + date + '"}',

Лучший выбор - использовать json2.js , чтобы убедиться в наличии действительного резидента реализации JSON, а затем сериализовать ваши данные перед вызовом ajax

var postData = JSON.stringify(data);
...
 data: postData,
...

Не полагайтесь на jquery, чтобы сделать это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...