使用Firebase进行简单表单提交;离线时可以检测到吗?

时间:2014-12-06 15:20:33

标签: javascript firebase

我使用Firebase可能稍微不同寻常 - 用于简单的表单提交。提交我的网站的联系表格只会导致:

ref.push({name:'dr foo', email:'1@2.com', message:'bar'}, myCallback);

Firebase与Zapier联系,向网站所有者发送电子邮件。一切运作良好,但我希望能够处理用户失去连接。当Firebase无法访问服务器时,我想显示:"当用户点击发送按钮时,请检查您的连接"或类似消息。 "谢谢,我们将保持联系" - 类型的消息只应在成功写入时显示。

起初我尝试在回调中包含if (error)分支,但当然断开连接并不是Firebase认为错误的原因,因为它会赶上"什么时候可以。

我还尝试了监控.info/connected的{​​{3}}。虽然这不会在表单提交尝试中显示消息,但我认为如果断开连接则可以显示警告。该示例间歇性地工作(Chrome 39,Firefox 30,Linux Mint),但断开连接和事件触发之间的滞后意味着它可能不适合这种情况。

我正在尝试做什么?

1 个答案:

答案 0 :(得分:0)

确实,.info/connected值只会在其他数据传输发生后发生变化(并失败)。

我能想出的唯一方法是使用transaction机制,applyLocally设置为false。 E.g。

function testOnlineStatus() {
    var ref = new Firebase('https://your.firebaseio.com/');
    ref.child('globalcounter').transaction(function(count) {
        return (count || 0) + 1;
    }, function(error, committed, snapshot) {
        if (error) {
            alert('Are you offline?');
        }
    }, false /* force roundtrip to server */);
}
setInterval(testOnlineStatus, 2000);

这个在大约15秒后触发了我。