Подтвердить что ты не робот

Angular $http service - принудительное отсутствие ответа на JSON

У меня есть файл test.ini на моем сервере, содержащий следующий текст:

"[ALL_OFF]
 [ALL_ON]
"

Я пытаюсь получить содержимое этого файла через службу $http, вот часть моей функции:

  var params = { url: 'test.ini'};
 $http(params).then(
                 function (APIResponse)
                   {
                     deferred.resolve(APIResponse.data);
                   },
                    function (APIResponse)
                   {
                     deferred.reject(APIResponse);
                   });

Эта операция получила исключение Angular (SyntaxError: Неожиданный токен A).
Я открыл файл фрейма Angular, и я нашел exeption:
Поскольку содержимое текстового файла начинается с " [" и заканчивается символом "]", Angular "думать", это файл JSON.

Вот код Angular (строка 7474 в версия 1.2.23):

 var defaults = this.defaults = {
    // transform incoming response data
    transformResponse: [function(data) {
      if (isString(data)) {
        // strip json vulnerability protection prefix
        data = data.replace(PROTECTION_PREFIX, '');
        if (JSON_START.test(data) && JSON_END.test(data))
          data = fromJson(data);
      }
      return data;
    }],

Мой вопрос:

Как я могу заставить Angular выполнить не эту проверку (if (JSON_START.test(data) && JSON_END.test(data))) и не разделить текстовый ответ на JSON?

4b9b3361

Ответ 1

Вы можете переопределить значения по умолчанию следующим образом:

$http({
  url: '...',
  method: 'GET',
  transformResponse: [function (data) {
      // Do whatever you want!
      return data;
  }]
});

Функция выше заменяет функцию по умолчанию, которую у вас есть postet для этого HTTP-запроса.

Или прочитайте здесь, где они написали "Переопределение преобразований по умолчанию на запрос".

Ответ 2

Вы также можете заставить angular обрабатывать ответ как обычный текст, а не JSON:

$http({
    url: '...',
    method: 'GET',
    responseType: 'text'
});

Это позволит убедиться, что angular не пытается автоматически определить тип содержимого.