2017-03-10 97 views
0

我已經設置了一個託管在AWS S3上的網站。我的主文件在主目錄中設置爲index.html,當我打開網站時,它會打開該文件,這正是我想要的。當我去我的網站(mysite.io)時,它被加載到mysite.io,這也是我想要的。我遇到的問題是,如果「/?#」不在URL中,我所執行的回調函數未被執行。網站主頁沒有執行回調#

從下面的代碼可以看出,當用戶在登錄表單中輸入他們的數據時,手機和密碼被讀入並傳遞到authenticateUser方法。如果URL中沒有「/?#」,則cognitoUser.authenticateUser(...)不會按照以下日誌所示執行。

$('#login-form').submit(function() { 
    var phone = $('#login-phone').val(); 
    var password = $('#login-pass').val(); 
    authenticateUser(phone, password); 
}); 

function authenticateUser(username, password) { 
    // a bunch of variables created here 
    console.log("This is always executed"); 

    myVariable.doSomething(someStuff, { 
    onSuccess: function (result) { 
     console.log("This is not executed if there is no '?#' after mysite.io/"); 
    }, 
    onFailure: function (err) { 
     alert("Neither is this"); 
    } 

    }); 

    console.log("This is also always executed"); 
} 

我在網上找不到任何有關這個錯誤的東西,真的很感謝一些幫助,因爲我對webdev很陌生。

回答

0

我認爲這是因爲您提交表單,所以頁面重新加載。在您提交的事件處理函數的底部使用event.preventDefault()。當然,您必須將event對象傳遞給參數:

$('#login-form').submit(function(ev){ 
    authenticateUser($('#login-phone').val(), $('#login-pass').val()); 
    ev.preventDefault(); 
}); 
+0

謝謝;工作!所以我希望在每一個表單提交中都有'event.preventDefault()',因爲我真的不希望頁面在表單提交上重新加載?您希望何時重新加載頁面? –

+0

是的,如果你正在使用AJAX,現在應該總是這樣,那麼使用'event.preventDefault()'。噢,HTML'

在正常(老學校)提交期間使用他們的'action'屬性通過他們的'method'屬性發送代碼,這意味着任何服務器代碼(通常是PHP)代碼都將基於'action'屬性執行。如果被遺漏,頁面會自動提交。除非您想要保證頁面重定向,否則您不想使用舊學校表單提交。通常,如果出現錯誤,您會運行產生錯誤的測試,因此提交後應該發生重定向。 – PHPglue