angularjs
  • flask
  • angular-resource
  • flask-cors
  • 2016-11-02 2 views 0 likes 
    0

    У меня есть код последующих, завод, который CONSUM АНИ отдых:

    angular.module('teachers') 
    .factory("TeachersService", 
        function($resource) { 
    
        var restPath = 'http://localhost:8001/entities/teacher/'; 
    
        return $resource(restPath + ':id', { id: "@teacherId" }, { 
    
         'getSubjects': { 
          method: 'GET', 
          url: restPath + ':id' + '/subject', 
          isArray: true 
         }, 
    
         'update': { method: 'PUT'}, 
    
         'getClasses': { 
          method: 'GET', 
          url: restPath + ':id' + '/class', 
          isArray: true 
         } 
    
        }); 
    
    
        }); 
    

    В контроллере я использую завод:

     vm.teacher = TeachersService.get({id: vm.teacherId}, function(){ 
          console.log(vm.teacher) 
         }, function(){ 
          console.log('Teacher not found') 
          vm.teacher = null; 
         }) 
    

    И данные retirieved хорошо, но сейчас мне нужно обновление данные этого лица, и я хочу использовать метод обновления, что завод имеет:

      vm.teacher.$update(function(){ 
           console.log('success') 
          }, function(error){ 
           console.log('error') 
           console.log(error) 
          }); 
    

    Но я не знаю, почему она всегда дает мне неудачу (методы работы остроумие h curl и с другими программами, такими как почтальон).

    Это пример заголовка провал:

    Object { data: null, status: -1, headers: fd/<(), config: Object, statusText: "" } 
    

    Я не понимаю, что происходит, я думаю, что проблема заключается в том, что я прохожу идентификатор. Я уверен, что объект vm.teacher имеет значение teacherId с целым числом, но я не знаю, почему это не передается. Кроме того, я вижу сетевую консоль firefox (в моем случае), и я вижу, что вызов на сервер не существует, но когда я изменяю определение на id, например, это: {id: "@_teacherId"} вызов выполняется, но с ошибкой, потому что url не имеет идентификатора объекта в конце, и сервер в методе PUT нуждается в этом.

    Пример поддельного пользователь (после того, как его получить):

    Object { createdBy: 1, phone: "+34740 51 73 72", createdAt: "Tue Oct 25 12:58:30 2016", name: "Alvaro", address: "Callejón Lourdes Pozuelo 11 Apt. 54…", teacherId: 4, $promise: Object, $resolved: true } 
    

    Любая идея? Я слишком много замалчивал. Спасибо!

    EDIT

    Если изменить код и установить метод получить вызов делает:

      'update': { 
          method: 'GET', 
          url: restPath + ':id' 
         } 
    

    , но не тогда, когда метод PUT:

      'update': { 
          method: 'PUT', 
          url: restPath + ':id' 
         } 
    
    +0

    http: // stackoverflow.com/a/17377120/1544886 –

    +0

    Что происходит с этим 'TeachersService.update ({id: vm.teacherId}, vm.teacher);'? – Searching

    +0

    @Поиск таким образом дает мне ту же ошибку: 'Object {data: null, status: -1, headers: fd/<(), config: Object, statusText:" "}' –

    ответ

    1

    Наконец, проблема была в API-интерфейсе Flask, где мне нужно было включить механизм совместного использования ресурсов Cross-Origin (CORS). Из-за этого я снова и снова повторил примеры без успеха, проблема не была в конце кода $ resource.

    Состояние -1 указывает на внутреннюю ошибку AngularJS, такую ​​как тайм-аут или ту же самую политику происхождения/CORS. Благодаря @georgeawg.

    В службе код был штраф:

    'update': {method: 'PUT'}, 
    

    В контроллере это было прекрасно также:

    vm.teacher.$update() 
    

    В моей колба апи я необходимо добавить следующее:

    from flask.ext.cors import CORS, cross_origin 
    ... 
    app = Flask(__name__) 
    CORS(app) 
    

    Дополнительная информация о фляжнике в документе: flask-cors.

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

    • Нет связанных вопросов^_^