Javascript Mithriljs:防止提交时完全重新加载应用程序
我有一个组件,它只是一个登录表单。 当登录失败时,由于某种原因,我会重新加载完整的应用程序 这是应用程序主条目。它所做的只是初始身份验证ping。如果会话启动,它将加载实际的应用程序,否则它将挂载身份验证组件,该组件只是一个登录表单Javascript Mithriljs:防止提交时完全重新加载应用程序,javascript,mithril.js,Javascript,Mithril.js,我有一个组件,它只是一个登录表单。 当登录失败时,由于某种原因,我会重新加载完整的应用程序 这是应用程序主条目。它所做的只是初始身份验证ping。如果会话启动,它将加载实际的应用程序,否则它将挂载身份验证组件,该组件只是一个登录表单 var Application = { run() { m.request({ method: "GET", url: cfg.apiurl("/session/ping"), extract(xhr) {
var Application = {
run() {
m.request({
method: "GET",
url: cfg.apiurl("/session/ping"),
extract(xhr) {
return xhr.status > 200 ? xhr.status : xhr.responseText;
}
}).then(r => {
var init = {
uname: r.data.uname
};
router(init);
}, e => {
if (e === 401) {
m.mount(document.body, Authenticate);
}
});
}
};
Application.run();
下面是验证组件减去视图。它将登录变量绑定到视图并定义提交操作。当我使用不正确的凭据运行submit操作时,它会重新加载应用程序
为什么要重新加载应用程序??
Chrome控制台显示:导航到http://localhost:3000/?
在“登录失败!!!”控制台消息之后。这将导致完全重新加载应用程序。因此,任何关于不正确登录的屏幕错误消息和弹出窗口都会消失。它会将最后一条错误消息打印到控制台“登录失败!!!”。之后,当submit函数退出时,它会导航到URL的根目录,从而导致完全重新加载
我做错了什么
var Authenticate = {
controller, view
};
function controller() {
this.info = m.prop("");
this.data = {
uname: m.prop(""),
passw: m.prop(""),
local: m.prop(false)
};
this.submit = () => {
Login.auth(this.data).then(r => {
if (this.data.uname() === r.data.uname) {
var init = {
uname: r.data.uname
};
router(init);
} else {
console.log("Login Mismatch !!!");
}
}, e => {
if (e === 401) {
console.log("Login Failure !!!");
popa();
} else {
console.log(`Server Errror ${e} !!!`);
}
});
};
}
非常感谢。如果您使用HTML
表单
-元素,提交总是会触发页面重新加载。您必须在此处preventDefault
m('form', {
onsubmit: function(event) {
event.preventDefault();
}, 'form content'
})
登录失败后立即执行的
popa()
函数是什么代码>?这里没有显示任何会导致页面重新加载AFAICT的代码。这只是滑入的错误消息。可以替换为console.log()。没有任何区别…就像我说的,这里的Mithril代码都不会导致页面重新加载-页面重新加载不是Mithril试图做的事情。凭直觉判断,问题要么出在popa()
中,要么出在应用程序的其他部分。如果您使用的是带有调试器的现代浏览器,则应该能够在popa()
处设置断点,并逐步查看问题所在。事实上,这里没有足够的帮助-对不起!谢谢你的帮助。这就是我所想的,看了几百遍,没有任何东西会导致重新加载。。。。删除popa()没有帮助。它在别的地方。明天早上我会重新看的。谢谢。很抱歉,确认晚了。我也找到了。我通常使用class.form
而不是普通的表单元素。所以我只是错过了点,它正在重新加载。。。有趣的是,我并没有提交表单,它仍然在非提交事件中重新加载。