post请求问题

心随念 2018-01-03 10:31:57
有这么一个情况: 有一个查询,参数比较多且很长,所以使用了post求情查询数据。

当测试人员测试时,提出了这么一个问题:
步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。
步骤二:测试人员说我想要刷新页面,所以把鼠标放入了浏览器地址栏,然后点击回车。那么此时相当于是一个get请求,且没有带入第一步的查询条件,所以出现的结果和第一步的不一样。所以测试人员说这是一bug,需要修改。

这种情况有什么好的方法能避免吗。

现在采取的措施是: 第一步查询时,将查询条件放入session,当第二步的情况发生是,判断是不是get请求,如果是get请求,则从session中取出查询条件,再做查询。

但是个人感觉这样总有不妥。所以期待各位大神能给出好的解决方案


...全文
558 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 9 楼 hjgzj 的回复:
[quote=引用 8 楼 u012445835 的回复:] [quote=引用 6 楼 hjgzj 的回复:] 步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
ajax 使用form.submit() 方式[/quote] 这样的话跟post还是get方式已经没关系了。 url按回车肯定不可能再拼一串参数带后台了。 其实正确的查询是(前提是你只使用ajax查询): url按回车永远显示初始化页面(url不带任何查询参数),只有通过页面点击查询按钮才可以查询数据 所以说是测试人员对查询页面理解有偏差[/quote] 举个很简单的例子,去12306,点余票查询,选择地点和日期之后,查询出车次,
引用 12 楼 u012445835 的回复:
[quote=引用 9 楼 hjgzj 的回复:] [quote=引用 8 楼 u012445835 的回复:] [quote=引用 6 楼 hjgzj 的回复:] 步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
ajax 使用form.submit() 方式[/quote] 这样的话跟post还是get方式已经没关系了。 url按回车肯定不可能再拼一串参数带后台了。 其实正确的查询是(前提是你只使用ajax查询): url按回车永远显示初始化页面(url不带任何查询参数),只有通过页面点击查询按钮才可以查询数据 所以说是测试人员对查询页面理解有偏差[/quote] 对啊。但是人家测试说了,我之前是什么样的页面。然后把鼠标移入地址栏回车 就应该是什么样的页面。在测试看来,把鼠标移入地址栏回车相当于刷新(相当于 浏览器F5 )。 [/quote] 如果你真按测试这么做了,那你以后的查询页面全都要这么做了。 我们项目的查询页面一般是:点击查询的时候,把参数拼接到url后面,然后页面跳转。
心随念 2018-01-05
  • 打赏
  • 举报
回复
引用 20 楼 u010562871 的回复:
别纠结了,就用你自己的方法,不傻!
就这样吧,结帖了。就用我自己的办法了
依然_范特西_ 2018-01-05
  • 打赏
  • 举报
回复
别纠结了,就用你自己的方法,不傻!
心随念 2018-01-05
  • 打赏
  • 举报
回复
引用 17 楼 qq_15824553 的回复:
[quote=引用 16 楼 u012445835 的回复:] [quote=引用 15 楼 wqdsfwer 的回复:] [quote=引用 11 楼 u012445835 的回复:] [quote=引用 10 楼 wqdsfwer 的回复:] 额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
你告诉我,在浏览器地址栏输入地址,然后回车不是get请求?[/quote] 我就问你,你要是get请求怎么再次往后台传值,你刷新你参数不是没了,现在不是教你吧参数从页面本地缓存拿出来刷新时一次传过去?,看不懂?[/quote] 不是刷新参数没了,而是直接地址栏就没有参数。这么说吧: 第一步: 测试人员正常的按照页面显示的表单,选择条件,然后提交表单。此时查询结果是正确的,选择查询条件的参数。但是因为此时提交表单是post请求,所以浏览器的地址是显示 http://xx.xx.xx.do ,浏览器地址中不会携带参数条件。 第二步: 是在第一步查询结果的基础上,已经出来查询结果的页面了。此时测试人员把鼠标放入 浏览器地址栏,然后回车(注意此时地址栏是第一步的地址: http://xx.xx.xx.do 没有携带参数)。 这时其实已经不是刷新了。所以 没有了第一步的参数。 还有就是,把第一步的参数缓存到本地。在第二步中也没有带任何参数。后台也没办法获取到缓存的数据啊。 [/quote]明白你的意思了,就是页面跳转了,你的查询条件和结果显示不是同一个页面的吧,可以用ajax写成不刷新界面的[/quote] 用 ajax 也没有用吧。 浏览器地址栏回车后,就直接请求后台了啊
wqdsfwer 2018-01-04
  • 打赏
  • 举报
回复
额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
  • 打赏
  • 举报
回复
引用 8 楼 u012445835 的回复:
[quote=引用 6 楼 hjgzj 的回复:] 步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
ajax 使用form.submit() 方式[/quote] 这样的话跟post还是get方式已经没关系了。 url按回车肯定不可能再拼一串参数带后台了。 其实正确的查询是(前提是你只使用ajax查询): url按回车永远显示初始化页面(url不带任何查询参数),只有通过页面点击查询按钮才可以查询数据 所以说是测试人员对查询页面理解有偏差
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 6 楼 hjgzj 的回复:
步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
ajax 使用form.submit() 方式
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 4 楼 qq_15824553 的回复:
post请求跟浏览器地址有什么关系啊?
这个不是post请求跟浏览器地址栏的关系啊,你看清下描述步骤啊。。。。 第一步:是已经提交了表单了,除了结果了。 第二步: 测试人员刷新页面,不是通过浏览器的刷新按钮,而是 把鼠标放入浏览器地址栏然后 回车。(此时 是get请求,第一步中的查询参数不会存在)
RockeyCui 2018-01-04
  • 打赏
  • 举报
回复
引用 16 楼 u012445835 的回复:
[quote=引用 15 楼 wqdsfwer 的回复:] [quote=引用 11 楼 u012445835 的回复:] [quote=引用 10 楼 wqdsfwer 的回复:] 额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
你告诉我,在浏览器地址栏输入地址,然后回车不是get请求?[/quote] 我就问你,你要是get请求怎么再次往后台传值,你刷新你参数不是没了,现在不是教你吧参数从页面本地缓存拿出来刷新时一次传过去?,看不懂?[/quote] 不是刷新参数没了,而是直接地址栏就没有参数。这么说吧: 第一步: 测试人员正常的按照页面显示的表单,选择条件,然后提交表单。此时查询结果是正确的,选择查询条件的参数。但是因为此时提交表单是post请求,所以浏览器的地址是显示 http://xx.xx.xx.do ,浏览器地址中不会携带参数条件。 第二步: 是在第一步查询结果的基础上,已经出来查询结果的页面了。此时测试人员把鼠标放入 浏览器地址栏,然后回车(注意此时地址栏是第一步的地址: http://xx.xx.xx.do 没有携带参数)。 这时其实已经不是刷新了。所以 没有了第一步的参数。 还有就是,把第一步的参数缓存到本地。在第二步中也没有带任何参数。后台也没办法获取到缓存的数据啊。 [/quote]明白你的意思了,就是页面跳转了,你的查询条件和结果显示不是同一个页面的吧,可以用ajax写成不刷新界面的
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 15 楼 wqdsfwer 的回复:
[quote=引用 11 楼 u012445835 的回复:] [quote=引用 10 楼 wqdsfwer 的回复:] 额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
你告诉我,在浏览器地址栏输入地址,然后回车不是get请求?[/quote] 我就问你,你要是get请求怎么再次往后台传值,你刷新你参数不是没了,现在不是教你吧参数从页面本地缓存拿出来刷新时一次传过去?,看不懂?[/quote] 不是刷新参数没了,而是直接地址栏就没有参数。这么说吧: 第一步: 测试人员正常的按照页面显示的表单,选择条件,然后提交表单。此时查询结果是正确的,选择查询条件的参数。但是因为此时提交表单是post请求,所以浏览器的地址是显示 http://xx.xx.xx.do ,浏览器地址中不会携带参数条件。 第二步: 是在第一步查询结果的基础上,已经出来查询结果的页面了。此时测试人员把鼠标放入 浏览器地址栏,然后回车(注意此时地址栏是第一步的地址: http://xx.xx.xx.do 没有携带参数)。 这时其实已经不是刷新了。所以 没有了第一步的参数。 还有就是,把第一步的参数缓存到本地。在第二步中也没有带任何参数。后台也没办法获取到缓存的数据啊。
wqdsfwer 2018-01-04
  • 打赏
  • 举报
回复
引用 11 楼 u012445835 的回复:
[quote=引用 10 楼 wqdsfwer 的回复:] 额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
你告诉我,在浏览器地址栏输入地址,然后回车不是get请求?[/quote] 我就问你,你要是get请求怎么再次往后台传值,你刷新你参数不是没了,现在不是教你吧参数从页面本地缓存拿出来刷新时一次传过去?,看不懂?
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 13 楼 weixin_37627432 的回复:
你可以试试,捕获页面刷新事件,在这个事件里调用你的form表单的 submit方法,自然就会带上之前输入的搜索条件。


通过F5刷新。或者通过这个 按钮刷新都是正常的。

其实 把 鼠标移入地址栏,然后回车。已经不是刷新了。捕捉刷新事件行不通吧
慢步蜗牛 2018-01-04
  • 打赏
  • 举报
回复
你可以试试,捕获页面刷新事件,在这个事件里调用你的form表单的 submit方法,自然就会带上之前输入的搜索条件。
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 9 楼 hjgzj 的回复:
[quote=引用 8 楼 u012445835 的回复:] [quote=引用 6 楼 hjgzj 的回复:] 步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
ajax 使用form.submit() 方式[/quote] 这样的话跟post还是get方式已经没关系了。 url按回车肯定不可能再拼一串参数带后台了。 其实正确的查询是(前提是你只使用ajax查询): url按回车永远显示初始化页面(url不带任何查询参数),只有通过页面点击查询按钮才可以查询数据 所以说是测试人员对查询页面理解有偏差[/quote] 对啊。但是人家测试说了,我之前是什么样的页面。然后把鼠标移入地址栏回车 就应该是什么样的页面。在测试看来,把鼠标移入地址栏回车相当于刷新(相当于 浏览器F5 )。
心随念 2018-01-04
  • 打赏
  • 举报
回复
引用 10 楼 wqdsfwer 的回复:
额,首先这个现象本来就是正常现象只是想做一个功能刷新后还是按条件查询而已,点击刷新按钮和鼠标放上去点确定有却别吗?是一样的,没有却别的,都是重新请求一下,你想要活动结果你要,那你就用本地缓存吧那个选择框的条件存下来,这个条件一直存在的,你刷新也会把这个条件给带到后台去的,而且怎么可能刷新下就变成get请求了,难道不写条件刷新就变成get请求了?,这种说法就有问题的,你要是是一个get请求那我咋把缓存的查询条件传过去对吧。
你告诉我,在浏览器地址栏输入地址,然后回车不是get请求?
oyljerry 2018-01-03
  • 打赏
  • 举报
回复
那就把当前的信息先存在localstorage中,页面显示的时候,判断是否有数据在存储中
soton_dolphin 2018-01-03
  • 打赏
  • 举报
回复
如果你用的是html5, 你可以用web storage 储存提交的信息 $('input[type="submit"][value="Search"]').click(function() { sessionStorage.setItem('inputdata', dataObj); }); 刷新完以后,你可以检查这个inputdata是不是已经被赋值, var savedData = sessionStorage.getItem('inputdata') if savedData !== null ,可以抽取出值来赋给相应的域
  • 打赏
  • 举报
回复
步骤一:选择查询条件,查询数据(此时是正常的,数据也都正确)。 这异步是跳转页面还是ajax?
  • 打赏
  • 举报
回复
感觉测试人员有病
RockeyCui 2018-01-03
  • 打赏
  • 举报
回复
post请求跟浏览器地址有什么关系啊?
加载更多回复(1)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧