app上的form跳转
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app上的form跳转相关的知识,希望对你有一定的参考价值。
参考技术A起原: 当时因为是测试银联,证书是测试证书,所以没有在app中走流程,在手机浏览器端走的流程,当流程一切都ok的时候,正式的证书也下来的,我们满心欢喜的在app上走一遍,本感觉已经万事大吉了,没想到在ios中出现了问题,在安卓中一切都好
程序流程: 当用户输入金额后,选择银联,点击充值,前端会调后台的接口,成功后,后台返回一个html, (html是银联那边返回的,我们无权修改) 前端这边解析html,拿到form表单,将form表单放入当时页面中body的最底部,提交表单,提交方式是post。
问题: ios中跳转银联的时候,会报501的错误,安卓没有问题
过程: 报501错误,立马问了下客服,客服人员说,501是因为提交的方式不对,是get提交,应该是post提交,
本以为是不是ios这里修改了提交的方式,和ios人员沟通后,ios人员说没有修改过;
又以为是ios原生会修改form提交方式,又用ios原生浏览器测了下,没有问题,与ios人员再次沟通后,双方从自己的角度去看看有没有办法去解决这个问题;
由是想,前端这里能不能把form提交修改成ajax的提交方式,我们这里把form拆解,将接口用ajax的方式提交,但是发生了跨域问题,因为是post方式,需要后台做相关处理,但是后台是银联那里的,不会因为我们这里去修改东西;ios那里也没有解决掉;
时间已经不早了,我们各自先回,待明日再战。
晚上难以入眠,一直再想这个问题,为什么会这样!!为什么
忽然灵光乍现,想到是不是因为ios在这里新开页面的问题, (因为ios打开web前端页面是新开,而安卓是在当前页面打开)
form提交,ios会打开新的页面,这样就是get提交,所以会报501。
次日,与ios人员沟通后,先让ios把公共内容注释掉,在当前页面打开,不去新开页面,看是否出现501错误的问题;最激动人心的时候,ios、前端、后台都屏息去见证圣神的一刻,如果不行,真的就是黔驴技穷了;还好老天怜惜我们,事情如流水一样没有波澜;成功了!果然是这个问题,一切都变的十分美好!
Javaweb的跳转问题
对于form的表单提交跳转,原理是什么?为什么说form表单跳转只能是由客户端发起的?而重定向和请求转发是由服务端开始的?谁能给我屡一下?不会的,请别回答,谢谢
通俗来说,form表单是写在前端页面(如html、jsp)上的,<form>有一个‘action’的参数,这里需要填写目标地址,如果不填写的话客户端是不知道往哪里发送信息的,因此form是由客户端主动发送给服务器(具体的地址就是action索要填的值)的。这属于客户端向服务器发起请求,代码表现为:
<form
action='10086.jsp' method='get' >
…………
</form>
就像你打10086,你问问题(提交表单),客服(服务器)会根据你的问题(form)反馈答案。同理,正常来说,后台接收到前端发来的信息后,会进行一系列操作,最后发送结果回去。
====分割线====
而转发和重定向的代码是写在后台代码里的,因为并不是所有的业务都由同一个后台页面处理(例如统一管理平台),前端form填的是页面A,但实际上页面A在接收到form后并不进行处理,而是通过转发或者重定向的方式,发送给页面B,页面B处理后会把结果发送给A,然后A再反馈给前端。因此,这属于服务器向服务器发起请求
转发的代码是request.getrequestdispatcher (10086-2.jsp).forward(request,response),特点是url不会变,客户端无法判断是form表单的后台页面在处理还是别的页面在处理(你在浏览器上是无法知道10086-2.jsp这个页面的存在)。就像10086客户有时候会让你稍等,等待期间你是不知道他是在敲电脑还是找外援寻求答案。
重定向的代码是response.sendRedirect("10086-2.jsp"),特点是url会变。浏览器的地址栏会明显看到地址发生改变。就像10086客服告诉你该问题不是他负责的范围,然后帮你转接到其他相应的客户。
至于怎么判断啥时候使用转发,啥时候使用重定向,还请理解jsp的四大作用域之后再回头思考。
追问我觉得这个答案很好
请问你是复制的嘛
别介意
如果你不是复制的
我想问
你几个问题
可以吗
追答自己写的,请问吧,我能回答的会尽可能回答
追问在吗
抱歉,刚刚上课去了
参考技术A 在itjobjava老师讲过:一、跳转到新页面,并且是在新窗口中打开页面:function openHtml()
//do someghing here...
window.open("xxxx.html");
window是一个javascript对象,可以用它的open方法,需要注意的是,如果这个页面不是一相相对路径,那么要加“http://”,比如:
function openHtml()
window.open("http://www.baidu.com");
二、在本页面窗口中跳转:
function totest2()
window.location.assign("test2.html");
如果直接使用location.assgin()也可以,但是window.location.assign()更合理一些,当前窗口的location对象的assign()方法。
另外,location对象还有一个方法replace()也可以做页面跳转,它跟assign()方法的区别在于:
replace() 方法不会在 History 对象中生成一个新的纪录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前纪录。 参考技术B 你后台有html元素吗,只有前台才有form标签才提供表单跳转所以说表单提交只能有客户端发起。重定向和转发是指请求已经到达后台,这是有后台重定向请求或转发请求。大概就是这个意思
以上是关于app上的form跳转的主要内容,如果未能解决你的问题,请参考以下文章