我正在做的是创建一个定义了其名称的对象,并将其发布到数据库中,然后立即找到它的位置并获取其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;
});
};
});
答案 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