如何使用angularJS获取刚发布的对象?

时间:2015-08-20 01:56:11

标签: javascript angularjs rest activiti

我正在做的是创建一个定义了其名称的对象,并将其发布到数据库中,然后立即找到它的位置并获取其id。我意识到如果我使用" get"就在" post"它将在发布之前获取数据。如何在获取数据库之前更新数据库?任何建议都会有所帮助,非常感谢!

/*controller createCtrl*/
outbox.controller('createCtrl',function($scope,$http,$filter,$window){
    console.log("In create control.");
    $scope.create = function(name){
        var a=$scope.name;
            console.log(a);
        var newmodel={name:a,};

        /*Post new model*/
        var urlpost = restURL+'/service/repository/models?size=50';
        console.log(urlpost);
        $http.post(urlpost,newmodel)
        .success(function (response, status, headers, config) {
           console.log(status);
           $scope.model = response.data;
          })
        .error(function(response, status, headers, config){
           console.log(response.error_message);
           $scope.error_message = response.error_message;
          });
        /*get the databese*/
        $http.get(urlpost,reqConfig)
        .success(function (response, status, headers, config) {
           console.log(status);
           $scope.models=response.data;
           console.log(response.data);
          console.log(a);
           var w=$filter('filter')(response.data,{name:newmodel.name},true);
           console.log(w);
           var urllink="rootURL+modeler.html?modelId="+w[0].id;
           console.log(urllink);
           $window.open(urllink);
          })
        .error(function(response, status, headers, config){
           console.log(response.error_message);
           $scope.error_message = response.error_message;
          });

    };
});

3 个答案:

答案 0 :(得分:3)

您是否只需要在发布请求的成功块中发出get请求?

/*Post new model*/
var urlpost = restURL+'/service/repository/models?size=50';
console.log(urlpost);

$http.post(urlpost,newmodel)
    .then(function (response) {
        console.log(response.status);
        $scope.model = response.data;

        /*get the database here*/
        return $http.get(urlpost, reqConfig);
    })
    .then(function (response) {
        console.log(response.status);
        $scope.models = response.data;
        console.log(response.data);
        console.log(a);
        var w=$filter('filter')(response.data,{name:newmodel.name},true);
        console.log(w);
        var urllink="rootURL+modeler.html?modelId="+w[0].id;
        console.log(urllink);
        $window.open(urllink);
    })
    .catch(function(response){
        console.log(response.data);
        $scope.error_message = response.data;
    });

答案 1 :(得分:3)

在后端,创建新条目,然后检索新条目。对于响应对象,发回新检索数据的数据。

不需要两个Ajax请求。

答案 2 :(得分:0)

我在2周前发布的代码是罗嗦的。 $ http.post将直接响应您刚刚创建的对象,因此可以删除过滤器。仍然使用.success和.error的更好方法是:

outbox.controller('createCtrl',function($scope,$http,$filter,$window){

    var urlpost = restURL+'/service/repository/models';
    console.log(urlpost);
    $scope.create = function(name){
        if(name==null||name==="undefined"||name==""){
            alert("Model name cannot be empty!")
        }else{
            parent.$.fancybox.close();
            console.log(a);
            var newmodel={name:a,};
            /*Post new model*/
            $http.post(urlpost,newmodel,reqConfig)
            .success(function (response, status, headers, config) {
                 console.log(status);
                 var modelId=response.id;   
                 var urllink="rootURL+modeler.html?modelId="+modelId;
                 console.log(urllink);
                 $window.open(urllink);

            })
           .error(function(response, status, headers, config){
                 console.log(response.error_message);
                 $scope.error_message = response.error_message;
            });
        }//End of else
        };//End of create function
}); //End of controller