функции, выполняемые до углового http успешного ответа

0

Я пытаюсь попасть в веб-службу с помощью контроллера директивы, я ударил метод 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. Как получить многообещающий ответ и выполнить функцию после.!

Теги:
angularjs-directive
angular-http

1 ответ

0

Вы можете получить обещание, а не стандартные данные, 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);
});
  • 0
    Но проблема в том, что scope.sendCSVFile находится в функции прямой ссылки
  • 1
    Итак, как вы использовали это раньше таким образом - var res = scope.sendCSVFile (attrs.getUrlModel, formData); scope.gridUpdate (RES); ?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню