2017-08-01 52 views
1

當Ajax調用成功,用戶被重定向到主頁:如何在成功完成Ajax後按下按鈕?

$('#button_1').on('click', function() { 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.href = "/"; 
       });  
      }); 

被重定向後,我想自動點擊另一個按鈕,打開一個模式。我想裏面done功能不同的方法:

.done(function() { 
    location.href = "/"; 
    $('#button_2').click(); // doesn't work 
}); 

.done(function() { 
    location.href = "/"; 
    setTimeout(function() 
     $('#button_2').click(); // doesn't execute 
    }, 2000); 
}); 

.done(function() { 
    location.href = "/"; 
    $(document).ready(function() { 
     // executes but user is immediately redirected to main page 
     $('#button_2').click(); 
    }); 
}); 

我也嘗試過阿賈克斯外,在Ajax調用是在功能,但有同樣的結果。

如何在Ajax調用之後以編程方式單擊該按鈕?因爲瀏覽器導航到另一個頁面

+0

嘗試'成功:'在阿賈克斯 –

+0

屬性是'$(「#button_2」 )'在'/'頁面中? –

+0

如果您將用戶重定向到其他頁面,則無法在第一頁中執行此操作。您必須在第二個(重定向)頁面上執行此操作。 –

回答

1

謝謝你的回答。我研究了一點,發現了另一種方式來做到這一點:

$('#button_1').on('click', function() { 
       sessionStorage.setItem("reload", "true"); 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.reload(); 
       });  
      }); 

而且在主要頁面:

$(document).ready(function() { 
     var reload = sessionStorage.getItem("reload"); 
     if (reload == "true") { 
      $("#button_2").click(); 
      sessionStorage.setItem("reload", false); 
     } 
    }); 
2

代碼旁邊

location.href = "/"; 

該線不會被執行。

所以你應該把你的邏輯放在/頁面(#button_2應該在那個頁面中)。

5

您需要在目標(主)頁面中添加該邏輯。

重定向後,當前頁面不再是活動頁面,並且所有邏輯都被刪除。

你可以爲了一些參數添加到URL知道什麼時候你在那裏由於重定向,是這樣的:

location.href="/?redirect=1" 

,然後檢查參數

+0

我對它的處理方式更容易處理,但對於您的建議+1 + –

2

你目前正在執行重定向後的代碼不可能直接執行,因爲location.href = "/"之後的代碼將永遠無法到達。一旦你重新定向你有一個清晰的狀態的新頁面。

您當前的功能仍然可以是這樣的:

$('#button_1').on('click', function() { 
    $.ajax({ 
     method: "POST", 
     url: "/somewhere", 
     data: { 
      //code 
     } 
    }).done(function() { 
      location.href = "/?modal-open=1"; 
    });  
}); 

正如你可以看到我已經添加了一個查詢參數重定向,所以我們知道我們的意圖開啓模式被重定向。

爲了您的根頁(/),您將需要一個這樣的腳本:

$(document).ready(function() { 
    // check the URL for the modal-open parameter we've just added. 
    if(location.search.indexOf('modal-open=1')>=0) { 
     $('#button_2').click(); 
    } 
}); 

這將檢查參數是URL,並觸發點擊。

+0

謝謝+1,祝您有個好的答案。我用我的答案解決了它,因爲它更容易處理 –

1

首先當你重定向一個新頁面時,你不能訪問DOM,因爲頁面被重新加載。你可以發送一個參數來做到這一點。

$(document).ready(function() { 

    //after page load 

    var isButtonActive = findGetParameter("isButtonActive"); 
    if(isButtonActive){ 
     alert("button_2 activated"); 
     $('#button_2').click(); 
    } 

    $('#button_1').on('click', function() { 
     //code 
     $.ajax({ 
      method: "POST", 
      url: "/somewhere", 
      data: { 
       //code 
      } 
     }).done(function() { 
      alert("page will be reload. button_2 wil be activated"); 
      location.href = "/?isButtonActive=true"; 
     });  
    }); 

    $('#button_2').on('click', function() { 
     alert("button_2 clicked"); 
    }); 

}); 

function findGetParameter(parameterName) { 
    var result = null, 
     tmp = []; 
    location.search 
     .substr(1) 
     .split("&") 
     .forEach(function (item) { 
      tmp = item.split("="); 
      if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); 
     }); 
    return result; 
} 
相關問題