java - 如何根据来自 ajax 的弹出窗口或对话框的输入来执行控制器
问题描述
在下面的代码“code_2”中,我有一个应用 http 方法 DELETE 的控制器,以根据提供的 id 删除特定产品。在“code_1”中,我正在尝试创建 ajax 调用,在执行 code_2 中的控制器之前,向用户显示或呈现一个对话框或弹出窗口,其中是 YES 和 NO。换句话说,当客户端调用
/product/remove/2
他应该会看到一个弹出窗口或对话框,带有 YES 和 No。当他单击 YES 时,code_2 中的控制器应该正常执行。如果他单击“否”,则不会发生任何事情..只有对话框或弹出窗口消失。
对于弹出窗口或对话框,我执行了以下操作,如下所示:
<body>
<form action="http://www.google.com/search">
<input type="text" name="q" />
<input type="submit" value="Go" onclick="return confirm('Are you sure you want to search Google?')"/>
</form>
</body>
我找不到带有“是”和“否”按钮的表格...你能帮我改正吗
我已经实现了以下 code_1 和 code_2。
请让我知道代码是否正确或需要修改...此外,我无权访问服务器,我是 ajax 和 spring mvc 技术的新手。
代码_1:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Ajax confirm delete prodcut</title>
<script
src="${pageContext.request.contextPath }/resources/js/jquery-1.6.2.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#confirmremoveform').click(function() {
var idx = $('#idx').val();
var ans = confirm("Are you sure you want to delete this Record?");
if (ans) {
$.ajax({
type: "DELETE",
url: "/product/remove/" + idx,
dataType : 'json',
contentType : 'application/json',
beforeSend: function () {
$("#modal-book").modal("show");
},
success: function (data) {
$("#onsuccessfuldelete").text(data);
},
error: function (errormessage) {
alert(errormessage.responseText);
}
});
}
});
}
</script>
</head>
<body>
<form action="http://www.google.com/search">
<input type="text" name="q" />
<input type="submit" value="Go" onclick="return confirm('Are you sure you want to search Google?')"/>
</form>
</body>
</html>
代码_2
@Controller
@RequestMapping("/product/remove")
public class RemoveProductPageController {
public final static String sRemoveProductFromListAttributeName = "removeProductFromList";
public final static String CONTROLLER_URL = "/product/remove";
public final static String DO_REMOVE_HANDLER_METHOD_URL = CONTROLLER_URL + "/{idx}";
@Autowired
private ProductService productService;
@RequestMapping(value = "/{idx}",
method = RequestMethod.DELETE)
@ResponseBody
public ResponseEntity<String> doRemove(@Validated @Size(min = 0) @PathVariable(required = true) int idx,
Model model) {
Product productToBeRemove = productService.getProductFromListByIdx(idx);
if (productToBeRemove == null) {
return new ResponseEntity<String>("no product is avaialble at index:" + idx, HttpStatus.NOT_FOUND);
}
model.addAttribute(RemoveProductPageController.sRemoveProductFromListAttributeName, productToBeRemove);
productService.removeProdcutFromListBxIdx(idx);
return new ResponseEntity<String>("product removed from index: " + idx, HttpStatus.OK);
}
}
解决方案
尝试使用SWAL (SweetAlert)。它是 javascript 弹出窗口的可定制替代品。
您可以选择很多选项。
例子:
JSP,单击删除按钮
$('#[idOfDeleteButton]').click(function (e) {
e.preventDefault();
swal({
title: 'Are you sure you want to delete this record',
type: 'warning',
showCancelButton: true
}).then(function () {
//execute once user confirms else nothing happens
var deleteLink = "[link to controller]?id="+[idTobeDeleted];
$.ajax({
url: deleteLink ,
contentType: "application/json",
type: 'GET',
success: function (res) {
//res is the string returned in the controller
if (res === "Success!") {
swal({
title: res,
text: "Delete Successful!",
type: 'success'
});
} else {
swal({
title: res,
text: "Deleting record Failed!",
type: 'error'
});
}
}
});
});
});
推荐阅读
- android - 为什么我的选项卡和底部菜单在平板电脑上的尺寸很小?
- javascript - 有没有办法有条件地更改 package.json 中的主条目文件?
- javascript - 如何从 for...of 循环返回值?
- javascript - 如何为带有变量的按钮赋值?
- c# - 如何锁定自动对焦
- android - 有没有办法在被Android操作系统杀死后强制重新启动应用程序?
- redux - 如何在使用 NgRx 完成前一个事件后发出一个事件?
- cmake - 如何将 sysroot 从 Yocto 传递给 cmake
- javascript - React 将图像 URL 传递给子组件
- javascript - 使用 ng build --configuration= 从 node_modules 加载纯 JavaScript 库