1. 程式人生 > >ajax 請求開啟新視窗被攔截

ajax 請求開啟新視窗被攔截

ajax 請求開啟新視窗被攔截

  • 解決方法一: 先開始開啟一個空的新視窗,然後改變新視窗的 url
function demo() {
  //未請求前開啟新視窗
  var newPage = window.open();
  $.ajax({
    url: "",
    type: "post",
    data: {},
    dataType: "jsonp",
    success: function(result) {
      //改變新視窗連結
      newPage.location = "http://www.baidu.com";
    }
}); }

這種實現方式有個弊端,就是不管 ajax 有沒有成功,都會執行 var wd = window.open();這行程式碼,所以成功和失敗都會開啟一個新視窗,除非在失敗後進行關閉,但這樣使用者體驗會非常不好,所以我用的第二種方式去實現的。

  • 解決方法二:

ajax 是預設是非同步的,這樣效能高,使用者體驗好,但這也導致了安全問題,要讓瀏覽器認為彈出新視窗是安全的,必須讓彈新視窗之前所有的 ajax 是同步的

$.ajax({
  type: "POST",
  dataType: "json",
  url: URL,
  async
: false, //同步請求 data: { orderNo: orderNo }, success: function(data) { if (data.status == "success") { window.open("www.baidu.com"); } else { alert("訂單不能支付!"); } }, error: function(data) { alert("正在載入請稍後!"); } });