Я пытаюсь попасть в веб-службу с помощью контроллера директивы, я ударил метод post и получил ответ, но ожидаемые значения стали пустыми, потому что все они были скомпилированы до ответа на успех. Это мой контроллер в рамках директивы
controller: ['$scope', '$http', 'popupService','SessionUtils', function($scope, $http, popupService,SessionUtils) {
$scope.responseValue = "";
$scope.sendCSVFile = function(link, fileData) {
$scope.seriveResponse = $http({
method: "POST",
url: link,
data: fileData,
headers: {
'Content-Type': undefined
}
}).success(function(response) {
if(response.status == "FAILURE"){
popupService.showErrMsg(response.message);
return false;
}
else {
$scope.responseValue = response;
//SessionUtils.updateResponse(response);
var success = "File Uploaded Successfully";
popupService.showSuccessMsg(success);
return response;
}
return $scope.responseValue = response;
});
});
и я вызвал контроллер из функции директивной ссылки, как
var res = scope.sendCSVFile(attrs.getUrlModel, formData);
scope.gridUpdate(res);
значение res
возвращается неопределенным, но я получаю ответ после привязки res
. Как получить многообещающий ответ и выполнить функцию после.!
Вы можете получить обещание, а не стандартные данные, ajax - асинхронный вызов, поэтому измените код на:
$scope.sendCSVFile = function(link, fileData) {
return $http({ //return promise object
method: "POST",
url: link,
data: fileData,
headers: {
'Content-Type': undefined
}
}).success(function(response) {
if(response.status == "FAILURE"){
popupService.showErrMsg(response.message);
return false;
}
else {
$scope.responseValue = response;
//SessionUtils.updateResponse(response);
var success = "File Uploaded Successfully";
popupService.showSuccessMsg(success);
return response;
}
return $scope.responseValue = response;
});
});
Применение:
$scope.sendCSVFile(attrs.getUrlModel, formData).then(function(response){
//here ajax is completed and in response variable You have raturn from success callback
if (response)
scope.gridUpdate(response);
});
scope.sendCSVFile
находится в функции прямой ссылки