①发送AJax请求。我用的JQuery,到底用哪个好?
使用下面这种最好,功能最全面。方便调试错误: 请求发送失败,返回值响应函数体没执行(alert测试是否执行)。
if (formData!=null && formData!=undefined) {
$.ajax({
url: '${baseAppPath}/system/role/update',
type: 'POST',
data: formData,
//dataType: 'json',
success: function (data) {
// alert("data:"+data)
window.location.href="${baseAppPath}/system/role/index?param="+new Date();
},
error: function (msg) { //响应函数的参数!!!。alert可以查看 请求的详细信息。【方便快速查错!!!曾在这里浪费很久时间】
alert("msg:"+msg)
}
});
}
②请求成功(200),但是controller返回值响应函数总是 执行error:function(){}的错误。
解决:去掉dataType:'json'
controller:
@RequestMapping("/update") //====修改后update
public void update(Integer roleId,RoleDO roleDO, String permissionIds,HttpServletResponse response) {
try {
// RoleDO 没有roleId属性
roleDO.setId(roleId);
System.out.println("===[roleId]:"+roleId);
if (permissionIds!=null && roleId!=null) {
roleService.updateRole(roleDO, permissionIds);
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer .write("[{'success':true}]");//===默认返回String。不是json对象
writer.close();
}
}catch (Exception e){
e.printStackTrace();
// return "{'success':false}";
}
}
③ async异步属性(没有特俗需要用不到(需要在请求发送后,后面js代码里 接收请求返回数据时。才需要async:false))
默认是true。AJax本就是异步发请求,局部刷新页面。。。
var treeNode; //====请求外部,接收 Ajax请求返回的数据===ztree菜单节点
if (roleId!=undefined && roleId!=null) {//====有roleId才回显
$.ajax({
url: "${baseAppPath}/system/permission/findByRoleId",//====查询要回显的
data: {"roleId": roleId},
type: 'post',
async: false,
dataType: "json",
success: function (permissions) {
treeNode = permissions;
}
});
}//=============================if roleId!=null
if (treeNode.length > 0) {
var treeObj = $.fn.zTree.getZTreeObj("menuTree");
//遍历勾选角色关联的菜单数据
//alert("treeNode.length:"+treeNode.length)
for (var i = 0; i < treeNode.length; i++) {
//if (treeNode[i].parentId != 0 && !("0" == treeNode[i].parentId )) {//只排除了一级父菜单
var nodes = treeObj.getNodesByParam("id", treeNode[i].id, null);
treeObj.checkNode(nodes[0], true, false);//第3个参数false,父子节点不级联勾选子节点
//}
}