如何在页面加载之前提交ajax请求

How do i submit an ajax request before the page is loaded

提问人:Manu 提问时间:10/10/2008 最后编辑:Manu 更新时间:10/11/2008 访问量:5541

问:

我想通过ajax请求检查用户的登录状态。根据用户是否登录,我想显示用户名/密码输入或用户名。目前,请求在 body.onload 上发送,并显示一个 prgoress 指示器,直到响应到达。有没有更好的方法?


假设需求声明不应有直接的服务器端处理。

JavaScript AJAX

评论

0赞 Neall 10/10/2008
如果您没有服务器端处理,如何验证他们的登录?

答:

1赞 Steve g 10/10/2008 #1

为什么不在给用户提供 html 之前进行检查呢?

如果您只是使用Javascript运行静态HTML,我建议使用JQuery并使用$(document).ready():

6赞 swilliams 10/10/2008 #2

这听起来像是在呈现页面之前应该首先在服务器上完成的操作。如果有人禁用了 javascript,会发生什么?

评论

0赞 Steve g 10/10/2008
这是可以做到的,只是与常态略有不同。如果他们没有启用 javascript,他们看不到任何内容(因为没有加载任何数据)。但是,是的,您必须非常小心地使用这种方法
0赞 swilliams 10/10/2008
是的,当任何与安全/登录相关的事情都是用 JavaScript 完成的时,我的脑海中总是会出现危险信号。
0赞 Kon 10/10/2008
+1 在代码隐藏中,最好执行安全检查以显示页面的初始呈现方式。
0赞 Neall 10/10/2008 #3

我认为这应该是可能的,但不建议这样做。正确的做法是让服务器在发送页面之前完全确定页面的内容。

如果您被缓慢的图像下载或其他非 HTML 内容所困扰,请查看各种 JavaScript 库之一。我总是推荐jQuery,它的语法如下:

$(document).ready(function() {
  // The DOM is fully loaded now, but images might still be loading.
});
0赞 James Curran 10/10/2008 #4

我相信如果你使用内联javascript,它应该在遇到时立即执行:

<HTML><HEAD>...</HEAD>
<BODY>
<script>
document.write("This is written before anything else");
</script>
This come later.
</BODY>
</HTML>
2赞 Eric Wendelin 10/11/2008 #5

如果你不想依赖一个工具包,你可以创建自己的 DOMReady 函数,它看起来像这样:

/* Usage: DOMReady(ajaxFunc); */
function DOMReady(f) {
    if (!document.all) {
        document.addEventListener("DOMContentLoaded", f, false);
    } else {
        if (document.readystate == 'complete') { 
            window.setTimeout(f, 0);
        }
        else {
            //Add event to onload just if all else fails
            attachEvent(window, "load", f);
        }
    }
}

或者对于更复杂的解决方案:http://snipplr.com/view/6029/domreadyjs/