2015-07-07 2 views
0

Я пытаюсь получить вызов $ http REST GET, работающий в моем проекте Appgyver, но ничего из того, что я делаю, кажется правильным, всегда возвращает ошибку.Угловой REST не может вернуть простые данные

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

Я проверил, что мой заказ API работает правильно и возвращает данные в ряде способов, а именно:

  • жёстко Curl запрос работает от Sh файлов в терминале - возвращает данные и правильный код 200
  • Тестирование конечных точек API как в POSTMAN, так и в SOA-клиенте Firefox.

Ввод в мой тест конечной точки http://somesite.com/quote-and-buy-performance/druidapi/taxonomy_term возвращает данные, как показано ниже:

[{"tid":"1","vid":"2","name":"ACME Ltd.","description":"","format":"filtered_html","weight":"0","parent":"0","uri":"http://somesite.com/quote-and-buy-performance/druidapi/taxonomy_term/1"},{"tid":"2","vid":"2","name":"ABC Films LTD","description":"","format":"filtered_html","weight":"0","parent":"0","uri":"http://somesite.com/quote-and-buy-performance/druidapi/taxonomy_term/2"}] 

Даже простой запрос CSRF маркер дает мне ошибки.

Может кто-то, возможно, указать, где я неправильно здесь, сайт Appgyver плохо документированы, и я попытался Угловое RESTful образец, который мой код ниже основан на от https://docs.angularjs.org/api/ng/service/ $ HTTP и https://docs.angularjs.org/api/ng/service/ $ HTTP # установка-http- заголовки

Пожалуйста, обратите внимание, что код ниже, в основном Angular.js с использованием синтаксиса JavaScript (в отличие от CoffeeScript), протоколирование выход следует за кодом

angular 
.module('main') 
.controller('LoginController', function($scope, supersonic, $http) { 
    $scope.navbarTitle = "Settings"; 

    $scope.stoken = "Response goes here"; 

    $scope.processLogin = function(){ 
     var csrfToken; 

     steroids.logger.log("START CALL: processLogin"); 

     // $form_login_email_address = $scope.login_email; 
     // $form_login_password = $scope.login_password; 

     $local_get = "http://somesite.com/quote-and-buy-performance/services/session/token"; 
     $hal_get_taxterm_index = "http://somesite.com/quote-and-buy-performance/druidapi/taxonomy_term"; 

     // $http.defaults.headers.common.contentType('application/json'); 

     var req = { 
      method: 'GET', 
      url: $hal_get_taxterm_index, 
      headers: { 
       'Content-Type': 'application/json' 
      } 
     } 

     $http(req) 
      .success(function(data, status, headers) { 
      steroids.logger.log("Inside http.get() success"); 
     }).error(function(data, status, headers){ 
      steroids.logger.log("Inside http.get() WITH ERROR"); 
      steroids.logger.log('data: ' + data); 
      steroids.logger.log('status: ' + status); 
     }).then(function(data, status, headers){ 
      steroids.logger.log("Inside http.get() then"); 
     }); 

     steroids.logger.log("END CALL: processLogin"); 
    } 

}); 

выход Logging из вызовов steroids.logger.log

View  Time   Level Message 
main#login 16:01:55.219 info "Inside http.get() WITH ERROR" 
main#login 16:01:55.219 info "data: null" 
main#login 16:01:55.219 info "status: 0" 
main#login 16:01:55.64  info "END CALL: processLogin" 
main#login 16:01:55.64  info "START CALL: processLogin" 

ответ

1

Вот что я хотел бы сделать:

Отдельным из вашего HTTP вызова в службу. Это довольно стандартный способ модуляризует код в угловом:

angular.module('main').factory("SomeService", function($http) { 
    return { 
    get: function() { 
     $http({ 
     url: "http://somesite.com/quote-and-buy-performance/druidapi/taxonomy_term", 
     method: "GET", 
     headers: { 
      "Content-Type": "application/json" 
     } 
     }).success(function(data, status, headers, config) { 
     console.log("Success!"); 
     console.log(data); 
     }).error(function(data, status, headers, config) { 
     console.log("Error!"); 
     console.log(status); 
     console.log(data); 
     }); 
    } 
    } 
}) 

Затем, чтобы использовать это в вашем контроллере, просто включите его в декларации контроллера и позвонить получить, как вы бы нормальный метод:

angular.module('main').controller('LoginController', function($scope, supersonic, SomeService) { 
    $scope.navbarTitle = "Settings"; 
    $scope.stoken = "Response goes here"; 
    $scope.processLogin = function(){ 
    var csrfToken; 
    steroids.logger.log("START CALL: processLogin"); 

    SomeService.get(); 

    steroids.logger.log("END CALL: processLogin"); 
    } 
}) 

Сделайте это, а затем прокомментируйте свои результаты, и мы можем работать оттуда.

+1

Хорошая позиция относительно нормализации кода. –

+0

Garret, спасибо за ваш вклад, попробовал это, точно такой же результат в основном. Даже написал базовый клиент REST, используя класс IP Works REST, и это дает мне результаты, но не решает мою проблему, что я должен создать приложение с помощью Appgyver. –

+0

Есть ли больше информации, которую вы можете получить о полученной ошибке? Кроме того, у вас есть доступ к коду для этой услуги? –

1

Если ваше угловое приложение находится в определенном домене, HTTP-запрос должен быть выполнен в пределах одного домена.

В вашем случае вы пытаетесь выполнить запрос перекрестного домена (запрос на другой домен). Затем вы должны сделать запрос на перекрестный домен.

Вы можете увидеть this question.

Для отправки перекрестных доменных имен используется $http.jsonp(). Там migth будет другим способом сделать это.

+0

Угловое приложение будет работать на мобильных устройствах и будет подключаться к моей веб-службе для входа в систему и выполнять простые запросы GET. Веб-служба сервера ofc будет находиться в указанном домене. –

+0

Итак, мой ответ - ваш ответ –

+0

Видимо, просто пытаюсь реализовать это сейчас. –

Смежные вопросы