1. 程式人生 > >ajax請求裡面呼叫window.open會被瀏覽器攔截(優化版)

ajax請求裡面呼叫window.open會被瀏覽器攔截(優化版)

眾所周知,ajax請求裡面呼叫window.open會被瀏覽器攔截方法有兩種解決辦法,但是經測驗例如ajax改為async:false同步請求還會出現一些問題(比如站點外網址被攔截);

  • 第一種解決辦法優化:

該方法優點描述:比如ajax回撥函式失敗,瀏覽器預設開啟的空連結會自動關閉,使用者體驗比較好。

var newwin;
    $("#btn").click(function(){
        newwim = window.open();
        //此處呼叫ajax,非同步即可:
        $.ajax({
            type:'POST',
            url
: ajaxurl, dataType : 'json', data:parameter, beforeSend : function(){}, success:function(data) { if(data.TSR_CODE == "0"){ newwin.location.href = xxx;//xxx為後端返回的地址; }else
{ alert(data.TSR_MSG); newwin.close();//此處為ajax失敗方法,自動關閉剛才會開啟的頁面; } }, error:function(){ console.log("訪問出錯,請重試!"); }, complete:function(){} }); });
  • 第二種解決辦法分析:

此方法測試過:比如後臺返回的是站外網址,谷歌瀏覽器、360瀏覽器等等會攔截請求,火狐、qq瀏覽器不會攔截,預測是瀏覽器自身對站外網址這種型別做了攔截,普通的網址不被攔截;

$("#btn").click(function(){
        //此處呼叫ajax,非同步即可:
        $.ajax({
            type:'POST',
            url: ajaxurl,       
            dataType : 'json',
            asyncfalse,//改為同步請求
            data:parameter,  
            beforeSend : function(){},
            success:function(data) {
                if(data.TSR_CODE == "0"){                
                     window.open(xxx);               
                }else{
                    alert(data.TSR_MSG);                    
                }
            },
            error:function(){
                console.log("訪問出錯,請重試!");
            },
            complete:function(){}
        });