jquery + IE 7 & 8 - ошибка разбора при получении данных JSON - PullRequest
0 голосов
/ 15 мая 2011

У меня есть несколько очень простых AJAX-вызовов с использованием jQuery.
Мои веб-методы c # помечены как [ScriptMethod(ResponseFormat = ResponseFormat.Json)] и возвращают правильно отформатированный JSON.
Это прекрасно работает в FF, но сходит с ума в IE:
вызывается обработчик ошибок, где response имеет status = 200 (!!), responseText - это правильный JSON, который я хочу получить, а statusText - "parsererror".

Я видел где-то на SO (кажется, не могу найти его снова), что проблема в том, что IE ожидает ответ в формате xml и вызывает исключение синтаксического анализатора для всего остального.
предлагаемое решение было,в основном, с помощью обработчика ошибок в качестве обработчика успеха:

$.ajax(
            {
                url: "SampleScriptService.asmx/Function",
                type: "POST",
                data: {},
                contentType: "application/json;",
                dataType: "json",
                success: function (result) {
                    SuccesFunction(result.d);
                },
                error: function (e) {
                    if (e.status != 200) {
                        alert("this is a real error");
                    }
                    SuccesFunction(JSON.parse(e.responseText).d);
                }
            });

это кажется мне по-настоящему хакерским.Кто-нибудь знает о каком-либо другом решении?
ps вещи, которые я уже пробовал: эти , это , все предлагаемые решения здесь

ОБНОВЛЕНИЕ
не уверен, связано ли это или нет, но IE также выдает эту странную ошибку -

Expected ';' Line: 101139813 Char: 5 Code: 0 URI: http://localhost/sample/samplePage.htm

Излишне говорить, что мой HTML-файл содержит ~ 100 строк.
Если я не выполняю ajax-вызовы (и, следовательно, вышеупомянутый обработчик ошибок не вызывается), то эта ошибка не появляется.

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Если это происходит только в IE, то это из-за опечатки в вашем ответе.Пожалуйста, покажите JSON, который вы получили с сервера.У вас есть объект, где последний элемент имеет запятую.

Вот так

 { "l1" : 1, "l2" : 2, }

Посмотрите, как это заканчивается на , }?Это должно закончиться просто }.

Просто чтобы подтвердить, что json выглядит так, без окружения "?

 {"d":
    {"__type":"PresentationObjects.UserPO",
     "Username":"admin",
     "FullName":"Admin User",
     "Password":"",
     "Roles":15,
     "UserRolesStrings": ["monitor","reports","schedule"­,"administration"],
     "IsAdministrator":true,
     "IsMonitor":true,
     "IsSchedule":true,
     "IsR­eports":true
    }
 }

Я вижу, что в ролях указано 15, ноВы только показываете 4. Вы редактировали результаты?

0 голосов
/ 16 мая 2011

ОК, это плохо.Я обновил с jQuery 1.4.4 до jQuery 1.6 и не заметил, что мои страницы действительно имели проблемы во ВСЕХ браузерах.
проблема была с плагином проверки, как описано в этот вопрос .
спасибо всем, кто нашел время, чтобы ответить.

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