ajax回調打開新窗體防止瀏覽器攔截有效方法

ajax回調打開新窗體防止瀏覽器攔截,就這麼作!javascript

問題剖析:java

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(){ 
 
    } 
  }); 
}

分析:
打開新窗體只能在點擊事件內觸發,點擊事件內的回調函數內打開窗體會被攔截,瀏覽器會認爲是廣告彈窗之類的代碼ajax

解決1:chrome

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();//回調發現無需打開窗體時能夠關閉以前的臨時窗體 
    } 
  }); 
}

缺陷:每次都會先打開一個空白頁,若是請求失敗的,要本身關閉空白頁,體驗很差。json

解決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").click();//href屬性更改後模擬點擊 
  } 
}

缺陷:當ajax請求到響應超過1秒鐘時,依然會被攔截(chrome及UC測試過)async

以上就是ajax回調打開新窗體防止瀏覽器攔截的兩種方法,但願對你們的學習有所幫助。函數

相關文章
相關標籤/搜索