2017-03-10 61 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