2013-04-10 42 views
1

所以看起來我的要求:

angular.module('todoApp').factory('UsersService', ['$resource', 'paramsService', '$q', function($resource, paramsService, $q){ 
var server = paramsService.serverUrl; 
return { 
    'auth': function(username, password){ 
     var $response = {}; 
     $resource(server + '/api/account/auth', {}, {call: {method: 'POST', headers: {'Content-Type': 'application/json'}}}).call(
      {'username': username, 'password': password}, 
      function(data){ 
       console.log(data); 
       $response = data; 
      } 
     ); 
     console.log($response); 
     return $response; 
    }, 
    } 
}]); 

在數據成功功能我HAVA響應,但變量$迴應是空的。我知道,但爲什麼會發生,但無法找到方法等待響應返回它。我如何獲得$資源的迴應?

+0

查看docs.angularjs網站上的教程示例。範圍項目接受承諾 – charlietfl 2013-04-10 14:13:36

回答

0

由於charliefl評論說您需要使用$ resource請求返回的promise對象來等待函數完成($ resource is asynchronous)。

我的用於處理POST請求的PHP代碼返回了寫入文件的字節數。我使用下面的代碼從響應中解析了它。由於'資源'對象不是真正的數組(像'參數'),我必須遍歷可能的索引,直到返回'undefined'。

所以底線是什麼在你的響應正文將作爲資源對象的字節數組返回給你。

$resource(...POST REQUEST...) 
     .$promise.then(function (resource) { 
      var bytesSaved = ''; 
      var i = 0; 
      while (resource[i] !== undefined) { 
       bytesSaved += resource[i]; 
       i++; 
      } 
      $scope.lessonMsg = 'File saved, ' + bytesSaved + ' bytes' 
     } 
     function(error) { 
      $scope.msg = 'An error occurred trying to save the file. ' + error; 
     } 
    ); 

這裏是PHP代碼生成POST響應:

case "POST": 
    $params = explode("file/", $_SERVER['REQUEST_URI']); 
    $filename = '../common/resources/fileContents' . $params[1] . '.json'; 
    $data = file_get_contents("php://input"); 
    $data = json_decode(file_get_contents("php://input"),false); 
    $fileJson = file_put_contents($filename, json_encode($data)); 
    echo $fileJson; 
break; 

的file_put_contents()調用返回寫入或假,如果有錯誤的字節數。