转 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 ...
随机推荐
- css定位于xpath的区别
css选择 是依据页面的数据样式定位的, 有标签选择, 类选择, id选择, 或者他们的交并集, 除此之外没有其他的辅助元素了 xpath 是路径表达式,所有元素和内容都可以成为路径的一部分. 两 ...
- VMware虚拟机ubuntu下安装VMware Tools步骤
双击VMware Tools进入 找到后缀.tar.gz的压缩文件 将压缩文件复制到home目录下,home目录即左侧的主目录文件夹 打开命令行终端,默认应该就是home目录,如果不是home目录,在 ...
- 使用deeplabv3+训练自己数据集(迁移学习)
概述 在前边一篇文章,我们讲了如何复现论文代码,使用pascal voc 2012数据集进行训练和验证,具体内容可以参考<deeplab v3+在pascal_voc 2012数据集上进行训练& ...
- 一次性升级所有python包的靠谱并且简单的方法
1. 用pip-review包pip install pip-review #安装包pip-review --auto #自动批量升级指令2. 编写代码import pipfro ...
- Book of Shaders 01 - 关于函数造型能力的理解
0x00 从函数出发 Shader 中的很多效果都是由函数计算得出的,如何更好地理解二者的关系呢.不妨先看看函数是什么?函数的定义可以简单地描述为:给定一个集合 A,对于其中的元素施加法则 f,则可以 ...
- Centos6.6x系统与unbutu18.04系统升级ssh到8.3版本
Centos6.6升级ssh5.3版本到ssh8.3版本 下载所需要的源码包: ]#wget https://files-cdn.cnblogs.com/files/luckjinyan/zlib-1 ...
- 日志分析平台ELK之前端展示kibana
之前的博客一直在聊ELK集群中的存储.日志收集相关的组件的配置,但通常我们给用户使用不应该是一个黑黑的shell界面,通过接口去查询搜索:今天我们来了ELK中的前端可视化组件kibana:kibana ...
- IDM下载度盘文件
百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...
- 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
- 关于对象的行为、数组、继承和类的高级概念(Java)
1.对象的行为: (1)方法调用栈:所有的方法调用都维护在一个称为调用栈的结构中. 第一个被调用的方法就是main(),该方法是Jvm调用的,因此main()方法总 ...