【问题标题】:Wait until asynchronous operation (firebase) call is done before page loads等到异步操作(firebase)调用在页面加载之前完成
【发布时间】:2015-01-08 03:55:57
【问题描述】:

我正在尝试执行一个异步操作,该操作将抓取数据并影响我的网页样式。

有没有办法让这个操作在页面加载之前完成?由于我想更改 div 元素的实际属性,我知道这不太可能,但我想就如何实现这一点让你们的想法。

也许通过将数据存储在浏览器会话中或其他方式以便它只需要思考一个?我不确定

var grab_user = new Firebase("https://<FIREBASE>.firebaseio.com/users/"+auth.uid);
//grab data from firebase
grab_user.once('value', function (dataSnapshot) {
    var $user = dataSnapshot.val();

    //if the user has this object,
    //change the head color to whats in their settings
    if($user.whitelabel)
        $("#top-header").css('background-color', $user.whitelabel.color);
});

【问题讨论】:

    标签: javascript jquery asynchronous firebase


    【解决方案1】:

    不。在 Firebase(以及现代网络的几乎任何其他部分)中加载数据是异步的,您必须在代码中处理它。

    如果在数据可用之前您的div 无法正确呈现,则应仅在从 Firebase 加载数据后将其添加到页面(或在页面上显示)。

    因此,将您的标题隐藏在 CSS (#top-header: { display: none }) 中,然后将您的代码更改为:

    var grab_user = new Firebase("https://<FIREBASE>.firebaseio.com/users/"+auth.uid);
    //grab data from firebase
    grab_user.once('value', function (dataSnapshot) {
        var $user = dataSnapshot.val();
    
        //if the user has this object,
        //change the head color to whats in their settings
        if($user.whitelabel) {
            $("#top-header").css('background-color', $user.whitelabel.color);
            $("#top-header").show(); // now we're ready to show the header
        }
    });
    

    如果整个页面应该隐藏,直到标题具有背景颜色,您还可以在 CSS 中将 body 标记为隐藏,然后在数据可用时显示

    【讨论】:

    • 谢谢!我最终将visibility 更改为body,因为display:none 弄乱了我的桌子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2011-02-15
    • 2018-10-18
    • 1970-01-01
    • 2020-04-09
    相关资源
    最近更新 更多