传带有多个参数的URl串,&的编码问题

来源:互联网 发布:.net域名崛起 编辑:程序博客网 时间:2024/06/09 20:11

今天做菜单管理,菜单的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);
        }

然后保存的就是我们需要的数据了。




0 0
原创粉丝点击