2013-07-31 2 views
1

Я немного новичок в Angular, и я пытаюсь настроить очень простую RPC-реализацию, использующую углы $http сервис (завод) для выполнения работы. Вот что я для службы до сих пор:

'use strict'; 

angular.module('xxx') 
    .factory('rpcService', function ($http) { 

    return { 
     request: function(method, params, callback) { 
     var service = method.split('.'); 
     params = params || {}; 
     params.method = service[1]; 
     return $http.post('/services/' + service[0] + '.sjs', params).then(function (response) { 
      return response.data; 
     }); 
     } 
    } 

    }); 

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

rpcService.request('Users.facebookLogin', { token: response.authResponse.accessToken }) 
    .then(function(response) { 
    debugger; 
    $rootScope.user = response.user; 
    console.log($rootScope.user); 
    $rootScope.loggedIn = true; 
    $rootScope.$apply(); 
}); 

код никогда не доберется до линии после отладки; Фактически, код никогда не делает запрос $http вообще. По какой-то причине он останавливается и не продолжает обратного вызова ... или обещал ... Я немного смущен относительно того, что такое техническая разница. :)

Это, как говорится, я проверил POST-вызов с $.ajax, и все возвращается правильно, поэтому что-то отключено с моим угловым кодом.

И код, который фактически запускает запрос и делает работу с $.ajax:

'use strict'; 

angular.module('xxx') 
    .factory('rpcService', function ($http) { 

    return { 
     request: function (method, params, callback) { 
     var service = method.split('.'); 

     params = params || {}; 
     params.method = service[1]; 

     $.ajax('/services/' + service[0] + '.sjs', { 
      type: 'POST', 
      dataType: 'json', 
      data: params, 
      success: function(data, status, xhr) { 
       if (callback) { 
        callback(data); 
       } 
      } 
     }); 
     } 
    }  
    }); 

Я просто не уверен, почему запрос XHR не делается.

+0

могли бы вы поделиться завершили код и настроить plunker пожалуйста –

+0

К сожалению, я не могу настроить plunker для этого, но позвольте мне добавить еще какой-то код. – dmackerman

ответ

2

В вызове API может возникнуть ошибка, поэтому обратный вызов никогда не запускался. Попробуйте добавить error() обратного вызова, как это:

return $http("POST", '/services/' + service[0] + '.sjs', params) 
    .error(function (response) { 
     return 'blah'; 
    }).then(function (response) { 
     return response.data; 
    }); 

Вы можете попробовать его на этой демонстрации. Ваш код действительно выглядит хорошо.

Demo on jsFiddle

+0

Спасибо, но это просто не работает. Я не получаю ответа от моего сервера вообще! Запрос никогда не гаснет, поэтому нет ошибок. – dmackerman

+0

Если вы откроете демоверсию, вы увидите, что ваш код на самом деле нормально. И код, который вы только что добавили с помощью $ .ajax(), не является угловым способом. – zsong

+0

Как вы видите, что все в порядке? Я смотрю на вкладку сети, и ничего не происходит? Извините мое невежество, но это не проблема? LOL – dmackerman

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