Angularjs + стероиды: $http не получит URL-адрес приложения, но работает в браузере
Я создаю веб-приложение, используя Appgyver Steroids и angularjs, и это приложение связывается с внутренним сервером в другом домене.
Вот соответствующий код (тупой нарочно; я пытался выделить проблему):
контроллер:
// App.
var app = angular.module('app', []);
// signup controller.
app.controller('SignupCtrl', function($scope, $http) {
$scope.signup = function() {
$http({
method: 'GET',
url: 'http://localhost:8080/watch/abcde/eta',
responseType: 'json'
}).success(function(data, status, headers, config) {
console.log('Success!');
}).error(function(data, status, headers, config) {
console.log(status);
});
};
});
Посмотреть:
<div ng-app="app" ng-controller="SignupCtrl">
<h1>Test</h1>
<button ng-click="signup()">Click Me!</button>
</div>
Я правильно настроил сервер, чтобы он включал CORS. Я протестировал код в Chrome и Safari, и он работает правильно: я получил правильный ответ JSON с сервера.
Однако, когда код инкапсулируется в приложение стероидов и запускается в симуляторе iOS, он не отправляет запрос на сервер. Я получаю код состояния, равный 0, и я не вижу никаких признаков запроса в анализаторе пакетов, который я настроил, ни в журналах моего сервера (работающего на локальном хосте, как приложение). Я еще не пробовал на реальном устройстве.
Обратите внимание, что AngularJS кажется правильно настроенным, потому что я использую его в других частях приложения, и он работает должным образом в симуляторе iOS (хотя эти другие контроллеры не выполняют никаких HTTP-вызовов).
Есть идеи, что может быть не так?
РЕДАКТИРОВАТЬ
Благодаря ответу Marcin Mikołajczyk я понял, что iOS Simulator работает на виртуальной машине, а это означает, что вызывать локальный хост внутри него не имеет смысла. Я использовал 127.0.0.1:8080 вместо этого, и он работает правильно.
1 ответ
Вы указали URL как локальный. Вместо этого используйте IP-адрес вашего ПК, на котором включен сервер. Localhost работает только локально, где включен сервер.