window.open()我想應該不少人都不陌生吧,它能夠實現除用a標籤之外來實現打開新窗口!ajax
最近開發項目用到時,卻遇到了麻煩,原本好好的彈出窗口,結果被瀏覽器無情的給攔截了!json
代碼以下:瀏覽器
$.getJSON(URL,data,function(data,state){ if(state=='success'){ window.open('http://www.cnblogs.com/garfieldzhong/'); }else{ alert('請求失敗!'); } })
這要手動容許彈出窗口,開發的東西但是給要給用戶玩的,這樣的攔截顯然是玩不轉的!安全
這讓我百思不得其解,因而乎,只有到百度裏谷歌之,發現,原來,這竟然是瀏覽器出於對安全的考慮,把這種非用戶操做的行爲給攔截了!這若是不解決掉顯然是有損助用戶體驗的!異步
方法倒也挺多的,不過,有些方法試了貌似是行不通的!好比建立一個a標籤,getJson完了去觸發a的點擊,事實證實這方法對此無效;還有加定時器的,這貌似也不行,並且,加定時器這事我的以爲也挺不靠譜的,畢竟,你沒法預知網友的網速等等,不肯定性太在!async
這裏介紹下我的親自試過,並且有效的方法!ide
方法一:url
$("#btn").on("click",function(){ var goto = window.open(); $.getJSON(URL,data,function(data,state){ if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('請求失敗!'); } }) });
此方法,能夠實現新窗口打開新頁面,不過,它有個問題,那就是當異步請求失敗了,也依然會有一個新窗口打開,由於它的原理很明顯,是一開始打開一個空的新窗口,而後改變新窗口的url,以此來實現跳轉。這彷佛與咱們的要求不太符合。因此找來了第二種方法!spa
方法二:code
$("#btn").on("click",function(){ $.ajaxSettings.async = false; //請求前設置爲同步請求 $.getJSON(URL,data,function(data,state){ $.ajaxSettings.async = true;//切記,請求完成以後要設置回異步 if(state=='success'){ goto.location.href = 'http://www.cnblogs.com/garfieldzhong/' }else{ alert('請求失敗!'); } }) });
關鍵詞就是$.ajaxSettings.async,設置了ajax請求的方法,請求前爲同步請求,這樣就能避免被瀏覽器攔截,可是,不推薦使用同步方法,因此,當這次ajax/getjson完了以後要把值改回 true。
目前,由於本人水平不限,只能用這樣的方法來實現,不知道哪位大神有沒有更好的方法,但願能給予指導啊!