ajax請求後彈開新頁面被瀏覽器攔截

     window.open()我想應該不少人都不陌生吧,它能夠實現除用a標籤之外來實現打開新窗口!ajax

     最近開發項目用到時,卻遇到了麻煩,原本好好的彈出窗口,結果被瀏覽器無情的給攔截了!json

     代碼以下:瀏覽器

$.getJSON(URL,data,function(data,state){
    if(state=='success'){
         window.open('http://www.cnblogs.com/garfieldzhong/');
    }else{
         alert('請求失敗!');
    }
})
View Code

 

     

     這要手動容許彈出窗口,開發的東西但是給要給用戶玩的,這樣的攔截顯然是玩不轉的!安全

     這讓我百思不得其解,因而乎,只有到百度裏谷歌之,發現,原來,這竟然是瀏覽器出於對安全的考慮,把這種非用戶操做的行爲給攔截了!這若是不解決掉顯然是有損助用戶體驗的!異步

     方法倒也挺多的,不過,有些方法試了貌似是行不通的!好比建立一個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('請求失敗!');
        }
    })
});
View Code

    此方法,能夠實現新窗口打開新頁面,不過,它有個問題,那就是當異步請求失敗了,也依然會有一個新窗口打開,由於它的原理很明顯,是一開始打開一個空的新窗口,而後改變新窗口的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('請求失敗!');
        }
    })
});
View Code

    關鍵詞就是$.ajaxSettings.async,設置了ajax請求的方法,請求前爲同步請求,這樣就能避免被瀏覽器攔截,可是,不推薦使用同步方法,因此,當這次ajax/getjson完了以後要把值改回 true。

    目前,由於本人水平不限,只能用這樣的方法來實現,不知道哪位大神有沒有更好的方法,但願能給予指導啊!

相關文章
相關標籤/搜索