2013-07-31 41 views
1

我對Angular有點新鮮,我正在嘗試設置一個非常簡單的RPC實現,它使用angulars $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和一切正常返回,所以一些關閉我的Angular代碼。

而實際上觸發請求,並與$.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