我在将选定的值发布到数据库时遇到了一个问题,其中包含不匹配的值。这是ajax调用映射到相应Java函数的场景。问题是,当用户第一次登录时,我没有在数据库中获得正确的选定值。请提供解决方案......
这是我的Jquery Ajax
if(selectedproductIds != '')
{
$.ajax({
url : "selectedProducts",
data : "selectedproducts="+selectedproductIds,
type : "POST",
success : function(data) {
}
});
$.ajax({
url : "<c:out value= "${saveDemoURL}"/>",
data : request,
type : "POST",
success : function(data) {
showNotification({
message : "",
type : "success",
autoClose : true,
duration : 5
});
resetForm();
alert("Demo Request Saved Successfully");
}
});
第一个ajax调用映射到此java函数
@RequestMapping(value = "/selectedProducts")
public @ResponseBody
String getSelectedProducts(
@RequestParam(value = "selectedproducts") String[] selectedproducts,
Map<Object, Object> map) {
List<Product> selectedProd = new ArrayList<Product>();
for (String prod : selectedproducts) {
Product product = new Product();
product.setId(Integer.parseInt(prod));
selectedProd.add(product);
}
if (!Util.isEmpty(selectedProd)) {
map.put("selectedproducts", selectedProd);
}
for (Product product: selectedProd) {
LOGGER.info("Demo ID:"+ " List of selected products:"+product.getId());
}
selectedProdList = selectedProd;
return "success";
}
第二个Ajax调用映射到此java函数
@RequestMapping(value = "/saveDemo")
public @ResponseBody
Map<Object, Object> saveDemo(@ModelAttribute("demoBean") DemoBean demoBean,
Model model, Map<Object, Object> map) {
Map<Object, Object> output = null;
Demo demo = new Demo();
try{
......
}
catch{.....}
return output;
}
答案 0 :(得分:0)
将您的代码更改为以下格式:$.ajax().ajax;
:
if(selectedproductIds != '')
{
$.ajax({
url : "selectedProducts",
data : "selectedproducts="+selectedproductIds,
async: false,
type : "POST",
success : function(data) {
}
}).ajax({
url : "<c:out value= "${saveDemoURL}"/>",
data : request,
async: false,
type : "POST",
success : function(data) {
showNotification({
message : "",
type : "success",
autoClose : true,
duration : 5
});
resetForm();
alert("Demo Request Saved Successfully");
}
});
答案 1 :(得分:0)
我不是百分之百肯定我明白你的两个函数正在做什么,但如果我是对的并且你正在尝试执行通常包含在事务中的东西,那么你不想从前端根本就是。交易的典型例子是从一个人的账户中取钱并将其放入另一个账户。如果由于电源故障,笔记本电脑重启,网络问题等原因导致中间过程中断,则整个过程需要恢复原状,否则钱只能从一个帐户中消失,永远不会去任何地方。
我想推荐你这个问题:jQuery deferred chaining problems
这有点不同,因为作者已经发现承诺可能是让事情共同发生的关键。但请注意我回答了两次。第二次是专门解释交易永远不应该从前端协调。如果您有两个必须始终一起完成的数据库操作,那么您必须只有一个API调用,它接收两个调用所需的所有数据,并在后端一起执行。从技术上讲,即便如此,你应该在后端使用类似数据库事务的东西来包装它们,这样一个电源故障就不会让你完成一半的操作。但是,如果您尝试在浏览器和服务器之间通过网络执行故障,则多步骤进程中间的故障会增加1000%。将该逻辑放入它所属的服务器中。