dataType和ajax问题

东方小猪 2016-05-20 03:16:12
这是一个复选框批量处理问题,在jsp页面中,如果加上dataType:'json', 数据返回的结果就是操作失败,虽然失败但是后台数据是确实执行了,所以这个失败的状态是假的,因为已经达到了目的。如果去掉dataType:'json', 就是返回是成功,但是被选中的复选框只会执行两条,明显是错误的。我想问的是如何在有dataType:'json', 的情况下,依然可以成功执行。恳请各位大哥帮忙,谢谢。
{
<script type="text/javascript">
function checkall(options)
var arr=new Array();
var obj = document.getElementsByName("getmid");
for(var i=0;i<obj.length;i++){
if(obj[i].checked==true){
arr.push(obj[i].value);
}
}
bootbox.confirm("确定提交操作?", function(result) {
for(var j=0;j<arr.length;j++){
var id=arr[j];
if(result) {

$.ajax({
type: "post",
url:"${ctx}/applyCUD?oper=checks",
data:{id:id},
dataType:'json',
async: false,
error: function(request) {
$.gritter.add({title: '提示!',text: '操作失败.请刷新后重试.',class_name: 'gritter-warning'});
},
success: function(data) {
if(data=='success'){
$.gritter.add({title: '提示!',text: '操作成功.',class_name: 'gritter-success'});
location.reload();
} }
});
}}
});
}
</script>
////////////////////////////////////后台Controller///////////////////////////////////////////
@RequestMapping(value = "/applyCUD")
@ResponseBody
public String applyCUD(@ModelAttribute Apply apply, String oper,Model model, HttpSession session) {
if (Constant.OPER_CHECKS.equalsIgnoreCase(oper)) {

Apply _apply = applyService.get(apply.getId());
if (_apply.getApplyStatus() == 1) {
_apply.setApplyStatus(2l);
Long sysUserId = (Long) session
.getAttribute(Global.SESSION_CURRENT_USER_ID);
SysUser sysUser = sysUserService.get(sysUserId);
_apply.setSysUser(sysUser);
// 系统生成邀请码
List<Invitation> invitations = invitationService
.invitation(null, sysUserService.get(Long
.parseLong(session.getAttribute(
Global.SESSION_CURRENT_USER_ID)
.toString())), 1,-1);
try {
httpClientManager.send(_apply.getPhone(),
"感谢您对G客的关注;您的申请已获通过,您的邀请码是"
+ invitations.get(0).getCode()
+ ",请尽快注册并登录到G客APP,谢谢!");

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (_apply.getApplyStatus() == 2) {
_apply.setApplyStatus(1l);

}
applyService.save(_apply);
return "success";
}
...全文
219 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
dataType是服务器返回的的数据的类型,你后台返回的是一字符串,你页面判断也是比较的字符串,你如果非要加上dataType:json的话,可以在后台吧那个返回值sucess转成json对象,这样 就跑的通了
东方小猪 2016-05-23
  • 打赏
  • 举报
回复


<script type="text/javascript">
function checkall(options){
var arr=new Array();
var obj = document.getElementsByName("getmid");
for(var i=0;i<obj.length;i++){
if(obj[i].checked==true){//被选中的复选框
arr.push(obj[i].value);//被选中的value值放入集合中
}
}
bootbox.confirm("确定提交操作?", function(result) {
for(var j=0;j<arr.length;j++){//遍历集合
var id=arr[j];
if(result) {
$.ajax({
type: "post",
url:"${ctx}/applyCUDPL?oper=checks",
data:{id:id,arr:arr.lengyh},
dataType:'json',
async: false,
error: function(data) {
$.gritter.add({title: '提示!',text: '操作失败.请刷新后重试.',class_name: 'gritter-warning'});

},
success: function(data) {
if(success){
$.gritter.add({title: '提示!',text: '操作成功.',class_name: 'gritter-success'});
location.reload();
}
}
});
}
}
});


}

</script>

这是一个验证码批量处理问题,我在JSP中进行遍历id.

@RequestMapping(value = "/applyCUD")
@ResponseBody
public String applyCUD(@ModelAttribute Apply apply, String oper,Model model, HttpSession session) {
if (Constant.OPER_CHECKS.equalsIgnoreCase(oper)) {

Apply _apply = applyService.get(apply.getId());
if (_apply.getApplyStatus() == 1) {
_apply.setApplyStatus(2l);
Long sysUserId = (Long) session
.getAttribute(Global.SESSION_CURRENT_USER_ID);
SysUser sysUser = sysUserService.get(sysUserId);
_apply.setSysUser(sysUser);
// 系统生成邀请码
List<Invitation> invitations = invitationService
.invitation(null, sysUserService.get(Long
.parseLong(session.getAttribute(
Global.SESSION_CURRENT_USER_ID)
.toString())), 1,-1);
try {
httpClientManager.send(_apply.getPhone(),
"感谢您对G客的关注;您的申请已获通过,您的邀请码是"
+ invitations.get(0).getCode()
+ ",请尽快注册并登录到G客APP,谢谢!");

} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (_apply.getApplyStatus() == 2) {
_apply.setApplyStatus(1l);

}
return "{success:true}";

};

东方小猪 2016-05-23
  • 打赏
  • 举报
回复
error: function(data) { $.gritter.add({title: '提示!',text: '操作失败.请刷新后重试.',class_name: 'gritter-warning'}); }, success: function(data) { if(success){ $.gritter.add({title: '提示!',text: '操作成功.',class_name: 'gritter-success'}); location.reload(); } } 那请问大哥,如果返回的是json,应该是执行success,但是每次都执行error.谢谢
Intboy 2016-05-21
  • 打赏
  • 举报
回复
return "success"; dataType是json的时候要返回格式为json吧,你这是字符串啊
rencht 2016-05-21
  • 打赏
  • 举报
回复
但是你后台返回的字符串并不是JSON格式啊,试试这样:
return "{success: true}"
东方小猪 2016-05-20
  • 打赏
  • 举报
回复

看不懂这个!
家里敷泥呀 2016-05-20
  • 打赏
  • 举报
回复
看看具体的错误信息吧。 error: function(request) 中,request返回的是什么信息?
东方小猪 2016-05-20
  • 打赏
  • 举报
回复
debug跑过了,没问题。问题在于jsp中加上dataType:json.复选框如果被选中后只会执行2条,当被选的大于两条的时候。如果去调dataType:json。就会有几条执行几条,但是前段页面会返回一个操作失败提示。
自由的刺猬 2016-05-20
  • 打赏
  • 举报
回复
应该跟json没啥太大的关系吧 java代码 看着眼晕 你debug跑过了吗 看看是什么情况

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧