ajax請求裡面呼叫window.open會被瀏覽器攔截(優化版)
阿新 • • 發佈:2019-01-28
眾所周知,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',
async:false,//改為同步請求
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(){}
});