4

В последней версии Angular (v1.3.0) они добавили исправление для заголовка контента для приложения/json. Теперь все мои ответы получают ошибку, потому что они недействительны JSON. Я знаю, что мне нужно изменить back-end для ответа с помощью обычного текстового заголовка, но я не могу контролировать это на данный момент. Есть ли какой-либо способ для меня предварительно проанализировать ответ, прежде чем Угловая пытается его разобрать?Angular 1.3.0 отличит ответы JSON, как мне переопределить это или предварительно проанализировать ответ до Angular?

я думаю, что это исправление они сделали: https://github.com/angular/angular.js/commit/7b6c1d08aceba6704a40302f373400aed9ed0e0b

У меня есть проблема в том, что ответ я получаю от фонового имеет префикс защиты, который не соответствует тот, который Угловой проверяет для.

Я попытался добавить http-перехватчик в конфиг, но это не помогло, все еще анализирует после самого Углового.

$httpProvider.interceptors.push('parsePrefixedJson'); 

Ошибка я получаю в моей консоли (это происходит от десериализации строки JSON в Угловом):

SyntaxError: Unexpected token w 
at Object.parse (native) 
at fromJson ... 

ответ

1

Вы должны использовать

$http.defaults.transformResponse 

Вы также не хотите использовать .push(). Вам нужно, чтобы ваш трансформатор выполнял свою работу перед трансформаторами по умолчанию. Вместо этого вы должны использовать .unshift().

Так что ваш код должен быть

$http.defaults.transformResponse.unshift(transformResponse); 

где transformResponse это функция, которая преобразует ответ от сервера в надлежащем формате JSON.

1

Я нашел способ изменить трансформатор по умолчанию, добавив в Угловом приложение:

app.run(['$http', 
    function($http) { 
     var parseResponse = function(response) { 
      // parse response here 

      return response; 
     }; 

     $http.defaults.transformResponse = [parseResponse]; 
    } 
]); 

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

Смотрите этот вопрос/ответ: AngularJS, $http and transformResponse