У меня странная проблема, над которой я работал пару дней.Проблема связана с перекрестным распределением ресурсов (CORS), я делаю запрос Angular GET
и могу видеть в инструментах разработчика Firefox / Chrome, что тело ответа JSON получено, однако JavaScript (или браузер, илисервер) отказывается передать мне тело ответа.Вот мой запрос:
$http = angular.injector(["ng"]).get("$http"); //angular http object
$http = angular.injector(["ng"]).get("$http");
$http({
method: 'GET',
url: 'api.example.com/myPath',
headers: {
'Content-Type': 'application/json',
}
}).then(function successCallback(response) {
alert("succeed: db "+JSON.stringify(response)); //this is not called
}, function errorCallback(response) {
alert("failed: " + JSON.stringify(response));//this is called
});
Как уже упоминалось в комментариях, функция сбоя называется не успехом.Я могу упомянуть / опубликовать переполнение стека и другие ссылки, на которые я был здесь, но их около 50, поэтому вот некоторые из них:
- SO 1
- SO 2
- SO 3
- SO 4
- SO 5
- Reddit 1
- SO 6
- GitHub 1
Заголовки, которые я пробовал (помимо того, что показано в коде):
"headers": {
'Content-Type': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Content-Type': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Accept': 'application/json',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Origin': '*'
}
"headers": {
'Accept': 'application/json',
'Access-Control-Allow-Origin': '*'
}
Пробовал все вышеперечисленное, некоторые из них не получат JSON-ответ, вместо Send OPTIONS
запрос и остановка.
Вот как выглядит выход Firefox:
Сеть
Консоль
А вот вывод функции Alert:
failed: {"data":null,"status":-1,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"api.example.com/myPath","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"","xhrStatus":"error"}
Другие вещи, которые я пробовал: Установка плагина для Chrome с именем CORS: Не работала вообще, без разницы
Примечание Сервер конечных точек - это не NodeJS, это Java, большинство ответов пришло across online предлагает добавить эти заголовки на сервер , но мои коллеги настаивают , что эту проблему можно решить с помощью внешнего интерфейса Angular (особенно после того, как они увидели, что правильная информация тела Json ответана самом деле приходит с сервера, как показано на рисунках в приложении)