jQuery.ajax () сообщает о недействительном json - Firebug хорошо разбирает - PullRequest
0 голосов
/ 29 июня 2010

У меня есть jQuery.ajax (), создающий запрос к URL (cms2 / docman / dir /% id) (% id - это числовое целое число без знака). Запрошенная страница выполняет некоторые функции и выводит массив. Затем этот массив запускается через drupal_json . drupal_json () выводит содержимое, сначала устанавливая заголовок на

Content-Type: text/javascript; charset=utf-8

Пока что все идет хорошо. Все функции работают, и JSON выводится, как и ожидалось. Через firebug он показывает, что полученный ответ является JSON, и предлагает вкладку «JSON» для предварительного просмотра.

Однако функция jQuerys jQuery.ajax () сообщает, что произошла ошибка синтаксического анализатора и что он вернул «недействительный» json. Я скопировал возвращенный json и бросил его в редактор (Eclipse PDT), но он показывает, что ошибок нет.

Я полностью в этой точке. Единственное, о чем я могу подумать, это если есть какое-то ограничение на количество текста, возвращаемого этим методом.

Создает запрос:

function request(url) {
    $.ajax({
        url: url, 
        type: 'POST',
        dataType: 'json',
        async: false,
        success: function(data) {
            if(data.status) {
                docman.store = data.info;
            }
            else {
                docman.hideMessages();
                docman.error(data.message);
            }
        },
        error: function(data,ts,et) {
            docman.hideMessages();
            docman.error(data);
            docman.store = data.responseText;
        }
    });
}

Вывод JSON здесь - http://codetidy.com/102

Ответы [ 2 ]

3 голосов
/ 29 июня 2010

Вы можете использовать http://www.jsonlint.com/, чтобы проверить свой JSON.Вы увидите, что в строке 136 содержится недопустимый код:

синтаксическая ошибка, неожиданный TINVALID в строке 136 Сбой при синтаксическом анализе

Необходимо дважды экранировать символкод.(Две обратные косые черты).

1 голос
/ 21 августа 2012

вы должны сделать что-то вроде этого

diff --git a/includes/common.inc b/includes/common.inc
index b86f2d2..ff246a3 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -2539,8 +2539,8 @@ function drupal_to_js($var) {
     case 'resource':
     case 'string':
       return '"'. str_replace(array("\r", "\n", "<", ">", "&"),
-                              array('\r', '\n', '\x3c', '\x3e', '\x26'),
-                              addslashes($var)) .'"';
+                              array('\r', '\n', '\u003c', '\u003e', '\u0026'),
+                              str_replace("\'","'", addslashes($var))) .'"';
     case 'array':
       // Arrays in JSON can't be associative. If the array is empty or if it
       // has sequential whole number keys starting with 0, it's not associative
...