layer层弹出框中请求ajax的时候,后台的数据都请求成功了,但是就是不执行success,如果是提交错了,就连error也不执行,原因如下:
还需要在controller的方法上边添加@ResponseBody,只有添加了这句话,返回给HTML的json字串才能够正常的解析
页面代码:
<form class="form form-horizontal" id="roleadd">
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>角色名称:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" value="" placeholder="" id="rolename" name="rolename">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>角色状态:</label>
<div class="formControls col-xs-8 col-sm-9">
<span class="select-box">
<select class="select" size="1" name="city" >
<option value="1" style="height: 50px;" name="rolestate" >正常</option>
<option value="0" style="height: 50px;" name="rolestate" >异常</option>
</select>
</span>
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-3">备注:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" value="" placeholder="" id="roledesc" name="roledesc">
</div>
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
<button type="submit" class="btn btn-success radius" id="admin-role-save" name="admin-role-save"><i class="icon-ok"></i> 确定</button>
</div>
</div>
</form>
原始代码:没有加return false
$("#roleadd").submit(function () {
var rolestate=$(".select option:selected").val();
var roledesc=$("#roledesc").val();
var rolename=$("#rolename").val();
$.ajax({
type: "POST", // 提交方式 get/post
url: "/filemanager/role/roletest", // 需要提交的 url
dataType:"json",
data: {
"rolestate": rolestate,
"roledesc":roledesc,
"rolename" :rolename,
},
success:function (data) {
alert("成功");
},
error:function () {
alert("失败");
}
});
// ** 注意这儿,原本没加return false ,**
var index = parent.layer.getFrameIndex(window.name);
// alert("hahaha")
parent.layer.close(index);
})
修改后的代码
$("#roleadd").submit(function () {
var rolestate=$(".select option:selected").val();
var roledesc=$("#roledesc").val();
var rolename=$("#rolename").val();
$.ajax({
type: "POST", // 提交方式 get/post
url: "/filemanager/role/roletest", // 需要提交的 url
dataType:"json",
data: {
"rolestate": rolestate,
"roledesc":roledesc,
"rolename" :rolename,
},
success:function (data) {
alert("成功");
var index = parent.layer.getFrameIndex(window.name);
// alert("hahaha")
parent.layer.close(index);
},
error:function () {
alert("失败");
}
});
return false; // ** 加了return false**
})
现在可以执行success方法了,原因如下:
layer 在弹出层做表单提交 点击提交可以和后台交互,但是提交完成后ajax的success不执行。因为点击提交后刷新了弹出层,当成功后,ajax保留的上次提交的报头信息和刷新完的页面信息不一样,所以ajax就执行不了了。就相当于你爬山上去走的这条路,下山时路中间有一段毁了,你要绕路,这样在这条路上等你的人肯定等不到。
最后找到原因,在最后面忘记加return false了