2013-12-09 3 views
3

С jQuery 1.9 они изменили $ .parseJSON, чтобы вести себя так же, как JSON.parse. Наиболее заметным изменением, вызвавшим меня головными болями, является то, что теперь пустые строки считаются недействительными JSON и вызывают ошибку jQuery.

В версии кода jQuery, которую я обновляю, есть много мест, где мы делаем запросы ajax с dataType: 'json', а в некоторых из этих случаев есть ситуации, когда сервер может отвечать пустой строкой. Это не проблема в нашей текущей версии jQuery, но я пытаюсь обновить и вызвать проблемы.

Было бы непростой задачей изменить все экземпляры $ .ajax с помощью dataType: 'json', в кодовой базе, чтобы обойти ошибку, вызванную $ .parseJSON, поэтому я ищу альтернативный способ работы с этим вопрос. Будет ли что-то вроде $ .ajaxPrefilter работать?

Лучшее решение, которое я мог думать о том, чтобы перехватить данные, которые поступают в через все Ajax звонки с dataType: 'json' и предварительного процесса он это использовать что-то похожее на jQuery's own suggested workaround, чтобы заставить его работать без необходимости изменять каждый АЯКС вызов индивидуально ,

+0

Предварительный фильтр, скорее всего, не решить проблему. Вы можете обезвредить файл $ .parseJSON, чтобы, если пустая строка передается ему, вместо этого он использует пустой объект или массив. –

+1

Почему бы не исправить сервер так, чтобы он возвращал действительный JSON? –

+1

Хорошая работа. Действительно показывает, что вы сделали домашнее задание. Я согласен с @Blue Skies, почему бы вам не исправить JSON, возвращенный сервером. Это принесет пользу и вам в нескольких других случаях. –

ответ

2

Вы можете использовать ajaxSettings() переопределить default converters:

$.ajaxSettings({converters: { "text json": yourSafeParseJSON } }) 
+0

Это именно то, что мне нужно. Благодаря! – finiteloop

Смежные вопросы