转 js调用提交表单。
今天做网银支付的时候,需要做到点击支付的时候提交订单,然后新窗口打开支付界面。
思路1:window.open(''),这个直接被pass了,因为银行的服务一般都是需要post数据的。就算是可以用get传递参数,window.open会被大部分浏览器拦截弹窗;
思路2:ajax成功之后,回调funciton中操作页面的一个带有'_blank'属性的表单,这个是网上大部分朋友提供的思路,但是已然不行,存在了跨域操作的'_blank'表单被脚本提交的时候,已然被拦截;
思路3:ajax成功之后, 回调funciton中操作页面的一个带有'_blank'属性的表单,表单的action指向同域名的一个url,在这个url里面重新生成一个新的不带'_blank'的表单,表单action指向需要提交的最终目的地url,表单里面用js操作一个在当前页面提交,本来以为这样可以欺骗到浏览器然浏览器认为这个'_blank'表单是指向同域名而不被拦截,但是相当遗憾的是,这个办法也失败了,带有'_blank'属性的表单,就算只指向同域名的url,也会被大部分浏览器拦截。
到这个时候,我已经有些无奈,准备和客户pk只能让用户添加信任网站,或者不在新窗口打开支付界面。
思路4:完全是灵光一现,误打误撞。ajax设置同步操作,在ajax执行完成之后,再用js执行带有'_blank'属性的表单提交,非常意外的是,居然在所有的浏览器都实现了新窗口打开而不被拦截
var result;
$.ajax({
async: false, //就是设置这个最为关键的ajax同步
type: 'POST',
url: ctx + "/sales/submitBank",
data: orderPost,
success: function(datas){
result = datas;
}
});
//同步ajax执行完成
//以下是动态生成表单提交
var str = [];
str.push('<form action="postcash" id="gobank" method="get">');
str.push('<input name="acceptId" value="' + datas.acceptId + '" id="postbankacceptId"/>');
str.push('<input name="time" value="' + datas.time + '"/>');
str.push('<input name="key" value="' + datas.key + '"/>');
str.push('<input name="merchantId" value="' + datas.merchantId + '" id="postbankmerchantId"/>');
str.push('</form>');
$("body").append(str.join(''));
$("#gobank").attr('target', '_blank');
$("#gobank").submit();
具体为什么会有这样的结果,我还没有研究的出来,也许是执行ajax同步锁定浏览器的时候,让浏览器SB掉了,不过总归说来,这样是可以欺骗浏览器来达到js新窗口打开页面的效果的
如果不需要执行ajax,也可以先执行一个完全没有作用的ajax来实现这个目的
转 js调用提交表单。的更多相关文章
- JS、jqueryie6浏览器下使用js无法提交表单的解决办法
-----------------------JS.jqueryie6浏览器下使用js无法提交表单的解决办法---------------------------------------------- ...
- js阻止提交表单(post)
在注册页面,我们经常要用到页面验证,验证到不符合要求的数据就阻止提交到服务器,如下 <script type="text/javascript"> function C ...
- js 回车提交表单的实现
我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...
- jQuery.Form.js 异步提交表单使用总结
jQuery.Form.js 是一个用于使用jQuery异步提交表单的插件,它使用方法简单,支持同步和异步两种方式提交. 第一步:引入jQuery与jQuery.Form.js <script ...
- JS post提交表单
js post方式提交表单有两种办法,1:AJAX提交 2:在JS里拼出一个form,然后submit 第二种办法的代码 //这个主要是解决给password MD5 var email = 'ema ...
- JS:JS判断提交表单不能为空等验证
这段代码在<form>中有οnsubmit="return on_submit()",如果 onsubmit ()返回 fasle,表单的元素就不会提交,即action ...
- js 回车提交表单
一.整个页面用一个回车提交事件: <input type="button" value="回车提交" id="auto" onclic ...
- js 判断提交表单
<SCRIPT language=javascript> function check_book() { if(document.form1.Username.value=="& ...
- JS判断提交表单不能为空 等的验证
转自:https://blog.csdn.net/qiu512300471/article/details/23259811 <script type="text/javascript ...
随机推荐
- windows服务器中创建账号及管理相关的net命令
本文测试环境:windows server 2012 R2 Datacenter 实例要求: 1.创建账号,加入到远程桌面组,能实现远程桌面登录 2.指定Full name .及Description ...
- spring aop原理和实现
一.aop是什么 1.AOP面向方面编程基于IoC,是对OOP的有益补充: 2.AOP利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可 ...
- Spring学习(四)IOC详解
一.简介 概念:控制反转是一种通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式.(被动创建) 优势: ① 降低对象之间的耦合 ② 我们不需要理 ...
- Zookeeper 笔记小结
转自: https://www.cnblogs.com/raphael5200/p/5285583.html 1.Zookeeper的角色 » 领导者(leader),负责进行投票的发起和决议,更新 ...
- (转载)IO模型
本文转载自网络. 如有侵权,请联系处理! 简介 参考<UNIX Network Programming Volume 1, ThirdEdition [Electronic resources] ...
- 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构
037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...
- Java知识系统回顾整理01基础02面向对象01类和对象
一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...
- 【题解】[SDOI2016]征途
Link 题目大意:给定序列,将它划分为\(m\)段使得方差最小,输出\(s^2*m^2\)(一个整数). \(\text{Solution:}\) 这题我通过题解中的大佬博客学到了一般化方差柿子的写 ...
- Mat对象与像素操作 OpenCV C++
Mat对象,分为两个部分,头部和数据部分 Mat对象拷贝之后是相互独立的 Mat对象有三种创建方法 CV_8UC1单通道,CV_8UC2双通道,CV_8UC3三通道,通道数 Scalar(0-255, ...
- JVM内存布局(又叫Java运行时数据区)
JVM 堆中的数据是共享的,是占用内存最大的一块区域. 可以执行字节码的模块叫作执行引擎. 执行引擎在线程切换时怎么恢复?依靠的就是程序计数器. JVM 的内存划分与多线程是息息相关的.像我们程序中运 ...