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


     window.open()我想應該很多人都不陌生吧,它可以實現除用a標簽以外來實現打開新窗口!

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

     代碼如下:

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

 

     

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

     這讓我百思不得其解,於是乎,只有到百度里谷歌之,發現,原來,這居然是瀏覽器出於對安全的考慮,把這種非用戶操作的行為給攔截了!這如果不解決掉顯然是有損助用戶體驗的!

     方法倒也挺多的,不過,有些方法試了貌似是行不通的!比如創建一個a標簽,getJson完了去觸發a的點擊,事實證明這方法對此無效;還有加定時器的,這貌似也不行,而且,加定時器這事個人覺得也挺不靠譜的,畢竟,你無法預知網友的網速等等,不確定性太在!

     這里介紹下個人親自試過,而且有效的方法!

     方法一:

     

$("#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,以此來實現跳轉。這似乎與我們的要求不太符合。所以找來了第二種方法!

    方法二:

 

$("#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。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM