Javascript Mithriljs:防止提交时完全重新加载应用程序

Javascript Mithriljs:防止提交时完全重新加载应用程序,javascript,mithril.js,Javascript,Mithril.js,我有一个组件,它只是一个登录表单。 当登录失败时,由于某种原因,我会重新加载完整的应用程序 这是应用程序主条目。它所做的只是初始身份验证ping。如果会话启动,它将加载实际的应用程序,否则它将挂载身份验证组件,该组件只是一个登录表单 var Application = { run() { m.request({ method: "GET", url: cfg.apiurl("/session/ping"), extract(xhr) {

我有一个组件,它只是一个登录表单。 当登录失败时,由于某种原因,我会重新加载完整的应用程序

这是应用程序主条目。它所做的只是初始身份验证ping。如果会话启动,它将加载实际的应用程序,否则它将挂载身份验证组件,该组件只是一个登录表单

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
而不是普通的表单元素。所以我只是错过了点,它正在重新加载。。。有趣的是,我并没有提交表单,它仍然在非提交事件中重新加载。