解决消息提示为undefined的方法及向后台提交数据的两种方法

这里介绍一下form表单提交和ajax向服务器提交两种方法的区别以及用法:

后台向前台返回数据时发现我的提示框里面的消息提示为undefined,因此就研究了一下此类问题的方法,下面的解决办法分享给大家。

这是使用form表单提交的方法:
jsp部分代码省略,其中含有form表单
js部分代码:

 function save(){            
                $("#fm").form("submit", {                    
                 url :url,
                 onSubmit : function() { 
                 return $(this).form("validate");                     
                     },
                     success : function(data) {                     
                     if (data){ 
                     **var data = eval('(' + data + ')');**//这里是将Json字符串转化为javascript Object
                     $.messager.alert("消息提示",data.message, "info");
                        }
                      $("#dialog").dialog({
                             closed : true
                       });
                       $("#fm").form("clear");                    
                       $("#dg").datagrid("reload");
                       $('#dg').datagrid('clearSelections');                                     
                        }
                    });

}

后台代码:

@controller
public Object addInfo(WareHouseAddCommand ud,HttpServletRequest request){
     ResultCommand<BaseObject> result = new ResultCommand<BaseObject>();         
     try{   
         log.info("调用WareHouseService里的addWareHouseInfo方法,入参为:{}",ud);
            wareHouseService.addWareHouseInfo(ud, request);
            result.setMessage("添加成功");
        }catch(Exception e){
            result.setMessage("添加失败,数据库中已存在此用户名");          
        }        
        return result.toJson();
        }//将result转化为json格式的字符串返回给前台,返回的格式为以下这样。

        {         
              "message": "添加成功"
        }  
        如果是用的springmvc框架,则可以加上@ResponseBody该注解在方法名的上面,
        则会自动转化为json格式,这里读者可自行查阅资料了解,
        此处的toJson是ResultCommand里面
        封装的方法。
}

ResultCommand方法里面封装了一些返回前端的消息

public class ResultCommand<T extends BaseObject> extends BaseObject {   
    public final static String SUCCESS = "success";
    public final static String FAILED = "error";
    private long totalRows;
    private String errorCode;
    private String message;
    private String result = FAILED;
    get set方法省略。。。。

我们可以看到,这里我们用了 var data = eval(‘(’ + data + ‘)’);这条语句将后台传过来的data(假设为Json格式的字符串)转化为了javascript Object格式,这样我们才可以调用data.message将后台的提示消息在前台显示出来。如果没有添加这句,就会在消息提示里面显示undefined,当然这里我们也可以使用Jquery中的$.parseJson(data)将data转化为Json的对象,这样才可以完成调用。

第二种向服务器传递数据的方法就为$.ajax:

$.ajax({
    url:baseUrl+"/XXXcontroller/XXX.htm",
    data:{
    $('#yourformid').serialize();//将你的表单序列化,省去将所需要传递的表单name属性一个个写进来的麻烦
        },  
   dataType:'json'    //规定预期的服务器响应的数据类型:json/xml/html/script/jsonp/text。自动转换为对象         
   success:function(data){
   if(data){
   $.messager.alert('消息提示',data.message,'info');                
   $('#dg').datagrid({});
   $('#dg').datagrid('clearSelections');
     });
    }
 }
 error:function(e){
    alert("错误!!");
     }

最后我们来总结一下
首先ajax方式:
1. ajax提交需要写data,不管是自己添加要传送到后台的内容还是序列化表单。
2. ajax提交的好处就是不用自己转化为json格式,直接加上datatype属性即可,指定预期的服务器响应的数据类型。
3. ajax提交需要自己添加表单验证,或者是先使用form表单验证以后,如果成功在执行ajax方法。因为validate是和form提交方式相结合的。

form表单形式:
1. 好处是不需要自己写data和验证。
2. 坏处是需要自己将json字符串格式转化为json对象格式
最后期待各位高手的批评指教。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值