最近在写一个关于订单提交,类似淘宝和京东的下订单的操作,当点击提交按钮的时候,我需要弹出一个页面,但是由于下订单是个复杂的操作,不是简单的点击一个按钮就能然后执行一个window.open()或者执行window.location.href就能够解决的,由于各种浏览器的安全机制的问题,可能但我们在进行ajax请求的时候需要在请求成功之后,得到ajax的返回值,才能进行页面的跳转,因为在跳转的时候需要使用返回值,否则请求没有意义。但是如果这样的话,就会出现一个问题,如果我们写的function里需要进行一番操作之后才能调用跳转 操作,那么就会出现浏览器的拦截,因为浏览器会把它当成自动执行的弹出框广告处理。如下所示:
function test(){
...一些操作
$.ajax({
type: "post",
dataType: "json",
//async: false,
url: _base+"/order/orderCommit",
data:{},
success: function(data){
var key=data.data;
window.location.href = _base
+ "/order/toOrderPay?orderKey="+key;
//或者下面的方法
//window.open(_base+ "/order/toOrderPay? orderKey="+key);
}
});
}
执行完下面的方法你会发现,浏览器会自动屏蔽你的这个方法的。
那么如果想要解决这个问题,第一个方法就是保证必须是用户的点击触发,也就是说你必须保证跳转方法在你的click方法的第一层,但是我们又需要ajax的数据怎么办?大家都知道ajax是默认是异步执行的,如果想在ajax外边执行,那么就会出现ajax还没有执行完毕,就已经跳转了,且参数为空,那么如何解决呢?既然ajax默认是异步的,我们可以将其改为同步的,问题不就迎刃而解了吗,如下:
function test(){
...一些操作
var key;
$.ajax({
type: "post",
dataType: "json",
async: false,//改为了同步
url: _base+"/order/orderCommit",
data:{},
success: function(data){
key=data.data;
}
});
window.location.href = _base
+ "/order/toOrderPay?orderKey="+key;
//或者下面的方法
//window.open(_base+ "/order/toOrderPay? orderKey="+key);
}
你们可以测试一下哦。。。。
另外还有一种方法:(借鉴的别人的,更简单一点;http://www.cnblogs.com/rainbowzc/p/3603209.html)
window.open是JavaScript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会拦截你,那么如何避免呢,感兴趣的朋友可以了解下本文或许对你学习有所帮助
window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,不过一般用来的是打开新窗口,因为修改原来的网页地址,可以有另一个函数,那就是window.location,他可以重定向网页地址,使网页跳转到另一个页面。
我 现在要说的是window.open函数的几个使用策略,一般情况下,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览器会 拦截你,认为你将弹出广告等用户不想得到的窗体,所以如果不想让浏览器拦截你,你可以将这个函数改为用户点击时触发,这样浏览器就认为是用户想访问这个页 面,而不是你直接弹出给用户。
所以常用的方法就是在超链接里加入onclick事件,如这样用户点击这个超链接,浏览器会认为它是打开一个新的链接,所以就不会拦 截。
可是有时候我们会遇到想要弹出一个窗口,可是却是在onckick事件执行后,才去弹出来的,这时就会被浏览器拦截,我们可以通过 下面的方法来避免,就是先用window.open打开一个窗口,然后修改地址。如var tempwindow=window.open(‘_blank’);打开一个窗口,然后用 tempwindow.location="http://www.XXX.com";
使这个窗口跳转到xxx网站,这样就会呈现弹出xx窗口的效果了。