ajax提交中新標(biāo)簽頁打開響應(yīng)返回的url
-
錯誤處理方式:
##觸發(fā)按鈕 <a href="javascrip:void();" data-url="xxxx" id='jiedong' class='tixian'>解凍</a> ##綁定事件 $("#jiedong").click(function (e) { $this = $(this); $this.text("處理中..."); $.ajax({ url: "xxxxxx", type: 'get', data: {}, success: function(data){ $this.text("解凍"); if(data.status == 1) { #新標(biāo)簽打開頁面 window.open($this.attr("data-url"); } else { ..... } }, error: function () { alert("服務(wù)器異常"); } }); });
-
原因分析及處理方案:
- 原因:
使用window.open打開url瑰抵,瀏覽器會將該請求當(dāng)成非用戶操作阿逃。
當(dāng)瀏覽器檢測到非用戶操作產(chǎn)生的新彈出窗口供填,則會對其進行阻止。因為瀏覽器認(rèn)為這不是一個用戶希望看到的頁面顽照。 - 處理方案:
原a標(biāo)簽正常執(zhí)行新開頁面操作,只是生效時間放到執(zhí)行click操作之后蘸吓,即:a標(biāo)簽綁定data-remote=”true“屬性状您,延遲執(zhí)行超鏈接動作傀蓉,當(dāng)click返回true時才執(zhí)行href的鏈接欧漱。
注意:此時ajax提交要進行同步處理,不然超鏈接是不會等待ajax的請求處理完才執(zhí)行了跳轉(zhuǎn)操作葬燎。(默認(rèn)是異步處理误甚,所以需要設(shè)置async:true;)
- 原因:
-
修正后處理方式:
##觸發(fā)按鈕 <a href="xxxx" id='jiedong' class='tixian' data-remote="true" target="_blank">解凍</a> ## 綁定事件 $("#jiedong").click(function (e) { $this = $(this); ## 設(shè)置標(biāo)桿,便于ajax的處理結(jié)果向外滲透 var flag = false; $this.text("處理中..."); $.ajax({ url: "xxxxxx", type: 'get', async: false, ## 重要 data: {}, success: function(data){ $this.text("解凍"); if(data.status == 1) { flag = true; ##向外滲透結(jié)果 } else { ..... } }, error: function () { alert("服務(wù)器異常"); } }); ## 決定是否執(zhí)行超鏈接動作 return flag; });