今天做网银支付的时候,需要做到点击支付的时候提交订单,然后新窗口打开支付界面。

思路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'属性的表单提交,非常意外的是,居然在所有的浏览器都实现了新窗口打开而不被拦截

代码如下:
Js代码 :

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调用提交表单。的更多相关文章

  1. JS、jqueryie6浏览器下使用js无法提交表单的解决办法

    -----------------------JS.jqueryie6浏览器下使用js无法提交表单的解决办法---------------------------------------------- ...

  2. js阻止提交表单(post)

    在注册页面,我们经常要用到页面验证,验证到不符合要求的数据就阻止提交到服务器,如下 <script type="text/javascript"> function C ...

  3. js 回车提交表单的实现

    我们有时候希望回车键敲在文本框(input element)里来提交表单(form),但有时候又不希望如此.比如搜索行为,希望输入完关键词之后直接按回车键立即提交表单,而有些复杂表单,可能要避免回车键 ...

  4. jQuery.Form.js 异步提交表单使用总结

    jQuery.Form.js 是一个用于使用jQuery异步提交表单的插件,它使用方法简单,支持同步和异步两种方式提交. 第一步:引入jQuery与jQuery.Form.js <script ...

  5. JS post提交表单

    js post方式提交表单有两种办法,1:AJAX提交 2:在JS里拼出一个form,然后submit 第二种办法的代码 //这个主要是解决给password MD5 var email = 'ema ...

  6. JS:JS判断提交表单不能为空等验证

    这段代码在<form>中有οnsubmit="return on_submit()",如果 onsubmit ()返回 fasle,表单的元素就不会提交,即action ...

  7. js 回车提交表单

    一.整个页面用一个回车提交事件: <input type="button" value="回车提交" id="auto" onclic ...

  8. js 判断提交表单

    <SCRIPT language=javascript> function check_book() { if(document.form1.Username.value=="& ...

  9. JS判断提交表单不能为空 等的验证

    转自:https://blog.csdn.net/qiu512300471/article/details/23259811 <script type="text/javascript ...

随机推荐

  1. 解决pycharm py文件运行后停止按钮变成了灰色的问题

  2. Cypress系列(60)- 运行时的截图和录屏

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 背景 在测试运行时截图和录屏能够在测试错 ...

  3. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

  4. Go-missing return at end of function

    where? Go程序中函数在执行的时候 why? 函数有返回参数,但是函数没有return关键字,报错 way? 添加return返回函数需要返回的参数

  5. web框架推导

    django 引言 所有的web应用本质上就是一个socket服务端,而用户的浏览器. 软件开发架构 cs架构 bs架构 本质上,bs架构也是cs架构 http协议 网络协议 http协议 数据传输是 ...

  6. Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  7. STM32F103C8T6驱动WS2812b灯条

    STM32F103C8T6驱动WS2812b灯条 几天小朋友到别人家玩,看上了人家的金鱼,人家就给了她一条小金鱼,有了小金鱼,怕它没氧气挂掉,买了一个氧气泵,没有东西喂它也不行,又买了一包鱼料,又因为 ...

  8. Springboot集成JUnit5优雅进行单元测试

    为什么使用JUnit5 JUnit4被广泛使用,但是许多场景下使用起来语法较为繁琐,JUnit5中支持lambda表达式,语法简单且代码不冗余. JUnit5易扩展,包容性强,可以接入其他的测试引擎. ...

  9. 左叶子之和(sum-of-left-leaves)

    LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...

  10. 【译】自动发现 .NET 5 中代码的潜在错误

    写代码是一件令人兴奋的事情,特别是对于  .NET 开发人员来说,平台越来越智能化了.我们现在默认在 .NET SDK 中包含丰富的诊断和代码建议.在您需要安装 NuGet 包或其他独立工具来进行更多 ...