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?
Ответы
Ответ 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 не пытается автоматически определить тип содержимого.