1. 程式人生 > >ajax非同步請求中使用window.open會被瀏覽器攔截解決方案

ajax非同步請求中使用window.open會被瀏覽器攔截解決方案

問題剖析:

function click_fun(){ 
   window.open("www.baidu.com");//能開啟 
  $.ajax({ 
    'url': '${pageContext.request.contextPath}/activity/savePrizes.htm', 
    'type': 'post', 
    'dataType': 'json', 
    'data': data, 
    success: function (data) { 
      window.open("www.baidu.com");//被攔截 
    }, 
    error:function(){ 
  
    } 
  }); 
}

分析:
開啟新窗體只能在點選事件內觸發,點選事件內的回撥函式內開啟窗體會被攔截,瀏覽器會認為是廣告彈窗之類的程式碼

解決1:

function click_fun_new(){ 
  var tempwindow=window.open();//先開啟臨時窗體,由於是點選事件內觸發,不會被攔截 
  $.ajax({ 
    'url': '${pageContext.request.contextPath}/activity/savePrizes.htm', 
    'type': 'post', 
    'dataType': 'json', 
    'data': data, 
    success: function (data) { 
      tempwindow.location = "www.baidu.com";//當回撥的時候更改臨時窗體的路徑 
    }, 
    error:function(){ 
      tempwindow.close();//回調發現無需開啟窗體時可以關閉之前的臨時窗體 
    } 
  }); 
} 

解決2:

function click_fun_new(){ 
  var flag = false; 
  $.ajax({ 
    'url': '${pageContext.request.contextPath}/activity/savePrizes.htm', 
    'type': 'post', 
    'dataType': 'json', 
    'data': data, 
    'async':false,//同步請求 
    success: function (data) { 
      $("#a").attr("href","www.baidu.com");//當回撥的時候更改頁面上或建立的某個a標籤的href 
      flag = true;//更改標誌 
    }, 
    error:function(){ 
        
    } 
  }); 
  if(flag){ 
    $("#a")[0].click();//href屬性更改後模擬點選 
  } 
} 

以上就是ajax回撥開啟新窗體防止瀏覽器攔截的兩種方法,希望對大家的學習有所幫助。