今天做菜单管理,菜单的url是菜单表单的一个字段,由于url较复杂,带有多个参数:/mgr/oms/catalog/catgroupMain.jsp?catalogId=10220&storeentIdSelected=10051&treeInitType=1
用post方式提交表单
var data = $('#frmEditModule').serializeArray();
$.post(url, data, submitCallback);
保存完成后url字段没能保存&及其以后的字符串。(post提交的时候,参数会跟在当前URl后面做其参数进行拼接:
/save.action?url=/mgr/oms/catalog/catgroupMain.jsp?catalogId=10220&storeentIdSelected=10051&treeInitType=1
)从上面的显示可以看出,后台会吧&后面当成当前action的参数,所以保存的url只会丢失部分数据。
既然知道了原理,为了解决这个问题,我们就需要在前段对&符号进行编码,现有的编码有escape,encodeUri,encodeUriComponent;
以上三种我都试过了,只有escape会对&进行编码,对url字段进行编码后:
/mgr/oms/catalog/catgroupMain.jsp?%25catalogId%3d10220%26storeentIdSelected%3D10051%26treeInitType=1;
这个是我前台处理的全部代码:var menuUrl = escape($("input[name='moduleBean.url']").val());
$("input[name='moduleBean.url']").val(menuUrl);
var data = $('#frmEditModule').serializeArray();
var url = $('#contextPath').val() + '/sysmgr/menu/module/save.action?modify='
+ $.data($('#frmEditModule')[0], 'modify');
$.post(url, data, submitCallback);
后台处理代码:String menuUrl = moduleBean.getUrl();
if(menuUrl != null){
menuUrl = URLDecoder.decode(menuUrl,"utf-8");
moduleBean.setUrl(menuUrl);
}
然后保存的就是我们需要的数据了。