gpt4 book ai didi

javascript - 文件未定义

转载 作者:行者123 更新时间:2023-12-03 11:19:09 25 4
gpt4 key购买 nike

我一直在尝试为我正在创建的该网站实施登录功能。我能够检查用户是否在数据库中。但是,如果用户不在数据库中,我希望以以下形式显示一条消息: “找不到用户。”我正在尝试使用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>


我是Web编程的新手,任何帮助将不胜感激。
谢谢。

最佳答案

“未定义JavaScript参考错误”
如前所述,有时仅定义变量即可解决问题。例如,在上面的jQuery示例中,我们可以调用noConflict()来恢复变量。

$的旧引用在jQuery初始化期间保存; noConflict()只是还原它们。

但这已经超出了本文的重点。

问题是,仅恢复变量或为其提供定义,尤其是当它与第三方依赖项相关时,并不是那么容易。

相反,通常可以通过以下两种方法之一解决问题。


按正确顺序加载库
可以说,看到ReferenceError的最流行原因与以下事实有关:我们的脚本引用了尚未定义的变量。


要解决此问题,通常是文件无序加载的问题,如果在具有自己的库的站点或Web应用程序的上下文中引发错误,则尤其如此,那么脚本的加载可能晚于你自己。

这意味着脚本要么放在页面的head元素之后,要么被加载到页面的页脚。在这种情况下,大多数框架和应用程序都提供了API,用于设置文件的加载顺序,设置依赖项,然后定义文件在页面中的加载位置。


利用未定义的值
另一个涉及较少的示例涉及调用带有可选参数的函数,然后检查调用该函数时是否定义了该参数。


例如,假设我们知道有问题的函数将在页面生命周期的两点被调用:

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
函数acmeReferenceError(valueExists){
  “使用严格”;

如果(未定义=== 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
但是请注意,我们不是在检查变量是true还是false,而是检查变量是否已实际定义。

鉴于此,我们就可以设置一个条件来执行给定或不存在变量的任何需要完成的工作。

最后,调用以下功能的方式如下:

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

第一个是最优的,第二个则是如此
在使用JavaScript时,最好以依序加载脚本。话虽如此,我总是建议第一个选择是合适的,更好的选择。

它不仅可以按脚本排序的方式工作,而且所需的文档和基于JavaScript的代码也更少,因为应用程序层的脚本顺序可以准确地显示并控制控件的工作方式。

但是,有时可能无法实现,或者某些环境无法提供所需的控制,如果是这种情况,那么第二种选择是可行的解决方案。

但是,如果您最终选择了这种方法,我强烈建议在功能级别添加非常清晰的代码注释,以说明使用了可选参数,为什么使用了可选参数以及应用程序的哪些方面需要进行此类操作。

关于javascript - 文件未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com