Angularjs 如何从$resource POST请求获得响应
我的要求是:Angularjs 如何从$resource POST请求获得响应,angularjs,Angularjs,我的要求是: angular.module('todoApp').factory('UsersService', ['$resource', 'paramsService', '$q', function($resource, paramsService, $q){ var server = paramsService.serverUrl; return { 'auth': function(username, password){ var $response = {};
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;
},
}
}]);
在success函数中,我在数据中有一个响应,但变量$response是空的。我知道但为什么会发生,但找不到方法等待回复返回。如何从$resource获得响应 正如charliefl所评论的,您需要使用$resource请求返回的promise对象来等待函数的完成($resource是异步的) 我处理POST请求的PHP代码返回了写入文件的字节数。我使用下面的代码从响应中解析了它。由于'resource'对象不是一个真正的数组(如'arguments'),我必须循环遍历可能的索引,直到其中一个返回'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;
}
);
以下是生成POST响应的PHP代码:
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()调用返回写入的字节数,如果出现错误,则返回false
Hello@falloff请尝试下面的代码片段,我认为这对您很有用。另外,让我知道它是否有效
请看docs.angularjs站点教程中的示例。范围项目接受承诺
angular.module('todoApp').factory('UsersService', ['$resource', 'paramsService', '$q', function($resource, paramsService, $q){
var server = paramsService.serverUrl;
return {
'auth': function(username, password){
let resource = $resource(server + '/api/account/auth', {}, {
save: {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
},
});
resource.save(
{'username': username, 'password': password}, (response) => {
if (response.length !== 0 && response.length === 0) {
// You will get respose here in 'response'
}
else {
// If response is null
}
deferred.resolve('request successful');
},
(err) => {
// Error
deferred.reject(err);
});
},
}
}]);