论坛首页 Web前端技术论坛

去掉get方式的URL中空的参数

浏览 3682 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-08-02  
当然,用post提交就没有任何参数了,但这不符合HTTP的规范,查询嘛,就得用get方式才好,但是get方式不够智能,查询表单中用户可能一个条件也没设置,一点查询,URL上跟一大串空参数如"?a=&b=&user=&q="很难看,我希望实现:如果用户一个条件也没选,那URL后面什么参数也不带,如果选了某个参数,URL上只带这个参数,不带任何空值的参数。

我想,唯一的方式就是不使用form,而是把非空的查询域手工组装一个URL,然后window.location.src=这个URL,但这种作法比起查询表单提交来看比较另类,所以需要有一个很强的组件把这个过程规范起来,否则开发团队自己写js实现会乱套的,代码质量和风格无法保证,本着不重复制造轮子的态度,先问一下有没有能干这个活的jquery组件啊

另外,查询表单有这种情况:有两个域,一个隐藏用于记录真实的参数,另一个显示用户的选择,这个域上点击时会弹出窗口、或出现ajax提示下拉框,用户选中一条后,其中文名称显示在该域,该记录的ID则赋给隐藏域,提交查询时,应只提交隐藏域,那个显示域其实没有用处,但默认的get提交就会全部提交了,URL会很长很难看,如果用组件自组URL就没这个问题了。

有能干这个活的jquery组件最好,没有的话只好自己实现一下,但有点信心不足,其实要考虑很多的,使用者代码怎么写?如何更简单和清晰?text\radio\checkbox\file等不同的域的取值?简单封装与灵活性的平衡等。嗯,我先抛块砖,说说我的想法:
要求开发者把所有的查询域放在一个容器如div中,每个域都要有一个id,jquery就可以找到并控制它们了,但不是所有容器中的域都是查询条件,所以开发者应显式的声明,但是显式的声明的话,就不必把所有域都放在某个容器中了,这样也好,比如除了查询表单中的查询域外,下面的翻页域其实也是一种查询条件,一起放在声明中就统一了,声明代码可以这样写:
javaeye 写道

<script type="text/javascript">
//声明查询域列表,其中的域如非空则组为URL,要声明域的ID和类型,不同类型取值不同吗?
//格式为$.getMethodForm(url,[fields..],target);提交地址、域列表、目标帧(省略为_self)
$.getMethodForm("save.jsp",[{id:"field1",type:"text"},{id:"field2",type:"checkbox"},{id:"field3",type:"radio"]);
//有点复杂啊,如果能省略类型就简单了,像下面这一行写的:
//$.getMethodForm("save.jsp",["field1","field2","field3"]);
</script>

按钮上的代码可以这样:
引用

<button type="button" onclick="$.getMethodForm.submit">保存</button>

组件提交时会组装为:window.location.src=url?filed1=xxxx形式执行。

请大家讨论,我还没写呢,先集思广益吧。欢迎高手奉献代码。
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics