文档未定义

时间:2014-11-29 03:03:42

标签: javascript jquery login document

我一直在尝试为我正在创建的网站实现登录功能。我能够检查用户是否在数据库中。但是,如果用户不在数据库中,我想以表格形式显示消息; “找不到用户。”我正在尝试使用jQuery,但我不断收到“文档未定义”错误。

我的js文件中的代码如下:

router.post('/login', function(req, res) {
    passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err) }
        if (!user) {
            req.flash('error', info.message);
                $(document).ready(function() {
                    $("#label1").text("Hello world!");
                    $("#label1").css('color', 'red');
                });
                return res.redirect('/nouser')//called when no user found. to implement
        }
                    req.logIn(user, function(err) {
                        if (err) { return next(err); }
                        res.redirect(req.session.returnTo || '/');
                    });
        })(req, res);
});

我的表格是:

 <!-- Username & Password Login form -->
    <div class="user_login">
        <form id="login" action="/auth/login" method="post">
            <label id="label1">Email</label>
            <input name="email" type="email" />
            <br />

            <label>Password</label>
            <input name="password" type="password" />
            <br />

            <div class="action_btns">
                <div class="one_half"><a href="#" class="btn back_btn"><i class="fa fa-angle-double-left"></i> Back</a></div>
                 <input type="submit" class="btn btn_red" value="login">
            </div>
        </form>

        <a href="#" class="forgot_password">Forgot password?</a>
    </div>

我对网络编程非常陌生,任何帮助都会非常受欢迎。 感谢。

1 个答案:

答案 0 :(得分:1)

“未定义JavaScript引用错误” 如前所述,有时简单地定义变量将解决问题。例如,给定上面的jQuery示例,我们可以调用noConflict()来恢复变量。

在jQuery初始化期间保存$的旧引用; noConflict()只是简单地恢复它们。

但这超出了本文的范围。

问题是,简单地恢复变量或给它一个定义,特别是当它与第三方依赖相关时并不那么容易。

相反,问题通常可以通过两种方式解决。

  1. 按正确顺序加载库 可以说,看到ReferenceError的最常见原因与我们的脚本引用尚未定义的变量这一事实有关。
  2. 要解决这个问题,通常是乱序加载文件的问题,如果在具有自己的库的站点或Web应用程序的上下文中抛出错误,则尤其如此,那么脚本可能是加载时间晚于您自己。

    这意味着将脚本放在页面的head元素之后,或者将它们加载到页面的页脚中。如果是这种情况,大多数框架和应用程序都提供了一个API,用于设置加载文件的顺序,设置依赖关系,然后定义页面中加载文件的位置。

    1. 利用未定义的值 另一个稍微涉及的示例涉及使用可选参数调用函数,然后在调用函数时检查是否定义了该参数。
    2. 例如,假设我们知道有问题的函数将在页面生命周期的两个点调用:

      当DOM准备就绪时,可能还没有定义因变量 页面加载并准备就绪时,可能已经定义了因变量。 为此,我们可以通过执行以下操作来利用JavaScript中的变量定义:

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function acmeReferenceError(valueExists){   &#39;使用严格的&#39;;

      if(undefined === valueExists){

      /* If this is hit, then the function is being invoked
       * before the variable in question has been defined.
       */
      

      }其他{

      /* If this particular conditional is hit, then the function
       * is being invoked after the value in question has
       * been defined.
       */
      

      }

      } 查看由GitHub使用❤托管的rawreference-error-not-defined.js 但请注意,我们不会检查变量是真还是假,而是实际定义了变量。

      鉴于此,我们可以设置条件,以便在存在变量的情况下完成需要完成的任何工作。

      最后,你调用以下函数的方式是这样的:

      假设您在定义值acmeReferenceError();之前调用该函数。 如果在定义值后调用函数,则调用acmeReferenceError(foo);其中foo是定义的值。 最有可能的是,第一种情况将在DOM加载时调用,但页面尚未就绪,第二种情况将在页面完全加载并准备就绪时调用。

      第一个是最优的,第二个是最优的 在使用JavaScript时,以依赖顺序加载脚本总是更好的主意。话虽如此,我总是建议第一个选项是正确的,更优的。

      它不仅可以按照脚本的排序方式工作,而且需要更少的文档和基于JavaScript的代码,因为应用程序层脚本的顺序显示 - 和控制 - 确切地说是如何工作的。

      然而,可能有几次不可能或环境问题无法为您提供所需的控制,如果是这种情况,那么第二种选择是可行的解决方案。

      但是,如果您最终走上这条路线,我强烈建议在功能级别包含非常清晰的代码注释,以解释可选参数的用途,原因以及应用程序的哪些方面需要执行此操作类似的东西。