这里介绍一下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对象格式
最后期待各位高手的批评指教。