Исправлен конфликт JQuery-1.4.1 и json-2.0 в конфликте регулярных выражений json.parse с символом "$" - PullRequest
0 голосов
/ 07 февраля 2010

После обновления до jquery 1.4.1 я заметил, что в любой момент я пытался вызвать json.parse.Эта проблема является частью регулярного выражения, используемого в JSON.он использует $ в шаблоне, который конфликтует с ярлыком $ JQuery.

Я не хочу использовать неконфликтную опцию с jquery, потому что у меня есть куча мест, где мне пришлось бы заменить $ нановый исправленный ярлык.

Есть ли способ обернуть шаблон регулярного выражения в одинарные кавычки или что-то еще, чтобы строка шаблона была обработана как буквально строка?

Разбитый раздел в json-2.0.js:(не работает на $)

if (/^[\],:{}\s]*$/.
test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
.....
}

Спасибо

Обновление:

Проблема была не в том виде, в котором она появилась, и не имела отношения к конфликту $,Из OP:

Ошибка бомбардировки на test.replace, поскольку переданный объект уже десериализован, поэтому метод replace не был найден.Я полагаю, что обновление до JQuery 1.4.1 внесло некоторые изменения в способ обработки объекта результата в событии успеха функции $.ajax.

Ответы [ 3 ]

3 голосов
/ 07 февраля 2010

Вы уверены, , что не работает на $, и по этой причине? Потому что, если это так, то это огромная ошибка пространства имен / разбора. Нет никакой причины, по которой движок JavaScript должен искать там внешний символ. Это уже инкапсулировано в том виде, о котором вы спрашивали (косыми чертами, которые фактически являются кавычками для регулярного выражения). Если бы это действительно было проблемой, это было бы столь же удивительно, как интерпретатор, задыхающийся от $ внутри строки. Я думаю, что ваша проблема лежит в другом месте.

1 голос
/ 07 февраля 2010

Вот страница, которая загружает в jQuery 1.4.1 и json2.js и вызывает JSON.parse (), и она не получает исключений или ошибок: http://gutfullofbeer.net/json.html

0 голосов
/ 07 февраля 2010

Ошибка при бомбардировке test.replace переданный объект был уже десериализован, поэтому метод replace не был найден. Я предполагаю, что обновление до JQuery 1.4.1 внесло некоторые изменения в способ обработки объекта результата в событии успеха функции $.ajax.

Этот вопрос следует удалить

Очевидно, этот вопрос нельзя удалить с количеством предложенных ответов.

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