form 表单提交到 iframe 遇到的问题

不知道有多少人这么写代码的。。

<form id="form" action="/view" method="post" target="test">
<input type="test" name="t" value="t"/>
<input type="button" value="submit"/>
</form>
<iframe id="test" name="test"></iframe>

<script> $('input[type="button"]').on('click', function(){
    $('#form').submit();
    $('#test').load(function(){
         var res = $(this).contents().find('body').text();
         console.log(res);
    });
}); </script>

这段代码目的就是将form表单里的数据提交到后台,后台返回内容到iframe里,这样可以不用跳转页面,实现当前页面不刷新的效果(之所以不用 ajax,是不想为 ajax 写过多的请求参数)。

但是我的js代码有问题。。

就是$('#test').load(function(){}) 写在了 button 的 'click' 事件里面,

后果就是每次 button.click 的时候,$('#test') 都会绑定一次 load 事件, 在页面不刷新的情况下,会造成$('#test') 绑了多次 load 事件,

也就会造成,每次 button.click , $('#test').load(function(){会执行多次...});(这应该是个低级ERROR);

解决办法方案就是

<script> 
$('input[type="button"]').on('click', function(){
    $('#form').submit();
}); 
$('#test').load(function(){
    var res = $(this).contents().find('body').text();
    console.log(res);
});

</script>

将 load 事件放在外面。。

最后,再也不犯这种错误了!!

转载于:https://my.oschina.net/igeeker/blog/378847

### 将Java生成的支付宝Form表单嵌入到HTML iframe元素 为了实现将由Java生成的支付宝支付`<form>`表单嵌入到HTML `<iframe>`元素中,可以采用服务器端渲染的方式,在服务端构建完整的HTML页面并将其返回给客户端浏览器。具体来说: #### 创建动态HTML响应 在Java Web应用程序中创建一个Servlet或其他类型的控制器来处理请求,并生成包含所需`<iframe>`标签及其内容(即支付宝支付表单)的HTML文档。 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String formContent = "<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Payment Form</title>\n" + "</head>\n" + "<body>\n" + " <!-- 嵌套支付宝支付表单 -->\n" + " <iframe srcdoc='" + generateAlipayForm() + "' width='100%' height='500px'></iframe>\n" + "</body>\n" + "</html>"; response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println(formContent); } } ``` 其中`generateAlipayForm()`方法负责组装实际的支付宝支付表单项[^1]。 #### 构建支付宝支付表单字符串 此函数应根据业务逻辑填充必要的参数值,并确保最终得到的是合法有效的HTML片段形式的字符串表示法。 ```java private static String generateAlipayForm(){ StringBuilder sb = new StringBuilder(); sb.append("<form id='alipayment' action='https://example.com/alipay/gateway.do' method='post'>\n"); // 添加隐藏字段用于传递交易详情数据 sb.append(" <input type='hidden' name='WIDout_trade_no' value='201709121234567890'/>\n"); sb.append(" <input type='hidden' name='WIDsubject' value='测试商品名称'/> \n"); sb.append(" <input type='hidden' name='WIDtotal_amount' value='0.01'/> \n"); sb.append("</form>"); return sb.toString().replaceAll("\r\n", "").replaceAll("\n", ""); } ``` 注意这里替换掉了所有的换行符以保证整个表单能够被正确解析为单一的`srcdoc`属性值的一部分。 通过这种方式可以在不改变现有架构的前提下轻松地完成目标功能开发工作。同时由于所有敏感信息均是在后台程序内部构造完毕后再发送至前端展示层面上显示出来的,因此安全性也得到了保障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值