繁体   English   中英

当我向我的数据库添加一个新元素时,整个事情都停止工作了

When I add a new element to my database the whole things stops to work

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我仍在尝试建立我的网站,人们可以在其中互相发短信、发送照片等。
在我想添加检查聊天中的第二个用户是否正在打字的功能之前,聊天的东西真的很好用。

这是我没有打字的代码,这真的很好;)

firebase.initializeApp(firebaseConfig);
const db = firebase.database();

// temporary user and receiver's names
const username = prompt("Nickname:");
const receiver = prompt("Receiver's name:");

// sending a message
document.getElementById("send-message").addEventListener("submit", postChat);
function postChat(e)
{
    e.preventDefault();
    const timestamp = Date.now();
    const chatTxt = document.getElementById("chat-txt");
    const message = chatTxt.value;
    chatTxt.value = "";
    db.ref("messages/" + username + "/" + receiver + "/" + timestamp).set({
        usr: username,
        msg: message,
    });

    db.ref("messages/" + receiver + "/" + username + "/" + timestamp).set({
        usr: username,
        msg: message,
    });
}

// printing the message
const fetchChat = db.ref("messages/" + username + "/" + receiver + "/");
fetchChat.on("child_added", function (snapshot)
{
    const messages = snapshot.val();
    const msg = "<li>" + messages.usr + " : " + messages.msg + "</li>";
    document.getElementById("messages").innerHTML += msg;
});

当我想检查第二个用户是否正在输入时,就会出现问题。 当我添加消息下方的代码时,就会停止工作。 数据库中有一个随机空值作为新用户向另一个空值发送消息。 用户之间的聊天也停止工作,用户看不到相同的消息,有时看不到任何消息,并且在我刷新网站时总是“未定义”类型“未定义”。

至少它正确地显示了某人何时打字,但其余的功能(过去可以工作)只是不再工作了。

这是打字的代码,我还尝试检查用户名和接收者的姓名是否不为空,但它并没有真正帮助。

// showing whether the receiver is typing
function sendTyping(tmp)
{
    if(tmp)
    {
        db.ref("messages/" + username + "/" + receiver).set({
            tpg: "yes"
        });
    }
    else
    {
        db.ref("messages/" + username + "/" + receiver).set({
            tpg: "no"
        }); 
    }
}

var searchTimeout;
document.getElementById("chat-txt").onkeydown = function() {
    if (searchTimeout != undefined)
        clearTimeout(searchTimeout);
        
    searchTimeout = setTimeout(callServerScript, 1500);
    sendTyping(true);
}

function callServerScript() {
    sendTyping(false);
}

let areTheyTyping = db.ref("messages/" + receiver + "/" + username);
areTheyTyping.on("value", function(snapshot) {
    const typing = snapshot.val();
    const status = typing.tpg;
    if(status == "yes")
        document.getElementById("writing").innerHTML = "typing...";
    else
        document.getElementById("writing").innerHTML = "";
});

我主要是自己写的,我将不胜感激,请使用简单的语言,以便我可以轻松理解问题的解释,我是新手。

3 个回复

我的经验表明,firestore 存在未定义值的问题。 您可以尝试为未定义或空的用户名添加默认值。 也许您可以添加零 (0) 作为此问题的默认值。

在 areTheyTyping 将路径db.ref("messages/" + receiver + "/" + username)更改为areTheyTyping db.ref("messages/" + username + "/" + receiver) 看看它是否有效

function sendTyping(tmp)
{
    if(tmp) {
        db.ref("messages/" + username + "/" + receiver).set({
            tpg: "yes"
        });
    }
    else {
        db.ref("messages/" + username + "/" + receiver).set({
            tpg: "no"
        }); 
    }
}
var searchTimeout;
document.getElementById("chat-txt").onkeydown = function() {
    if (searchTimeout !== undefined)
        clearTimeout(searchTimeout);
        
    searchTimeout = setTimeout(callServerScript, 1500);
    sendTyping(true);
}

function callServerScript() {
    sendTyping(false);
}

let areTheyTyping = db.ref("messages/" + username + "/" + receiver);
areTheyTyping.on("value", function(snapshot) {
    const typing = snapshot.val();
    const status = typing.tpg;
    if(status === "yes")
        document.getElementById("writing").innerHTML = "typing...";
    else
        document.getElementById("writing").innerHTML = "";
});

功能

const fetchChat = db.ref("messages/" + username + "/" + receiver + "/");
fetchChat.on("child_added", function (snapshot)
{
    const messages = snapshot.val();
    const msg = "<li>" + messages.usr + " : " + messages.msg + "</li>";
    document.getElementById("messages").innerHTML += msg;
});

每当将孩子添加到您的消息目录时,它都会获取聊天,因此当您将输入状态存储在"messages/" + username + "/" + receiver + "/"中时,函数.on知道您已经更改/添加了一些东西,因此发布了一条消息。 它是未定义的,因为消息实际上是空的。 您应该创建一个新目录来存储areTheyTyping状态,例如"status/" + username + "/" + receiver + "/"
希望我有所帮助。

2 当在列表上添加新元素时,重新绘制停止片刻

Java.problem是当我开始添加新元素时,计时器工作时每次都会停止一会儿,并且当元素重绘时,元素一直在移动终结,就像这些东西一直在移动一样。还有抛出奇怪的异常。 一些代码: 这是生成新项目的新线程: 那是什么问题? 如果您需要更多信息,请说我会给。 ...

2013-11-12 19:37:39 1 37   java
3 我的第二个CSS
在添加新标签后停止工作?

这有点怪异,在我的第二篇文章中,我有2张图像,第一个是圆形,而另一个在右侧除外。 我的问题是,每当在第二篇文章之后添加新标签时,第二篇文章的CSS都会被删除,不知道为什么。 HTML .section3 { background: #f6e7c0; max-width: ...

2015-05-01 16:02:09 2 42   html/ css
4 当我添加更多元素时,悬停停止工作

这是一个简单的网站:1个特色文章和3个小盒子。 我的悬停效果变暗。 问题是当我添加小盒子时。 它停止工作=( 使用CSS的完整代码: 1个小盒子(工作) http://codepen.io/tsalexey544/pen/wBExPJ?editors=110 3 ...

2015-03-09 14:08:25 2 45   html/ css
5 当我添加一些新代码时,jQuery停止工作

我是jquery的新手,所以对不起,这个问题很抱歉。 我遇到的问题是,我是在别人之前写的一些代码的基础上构建的,但是当我尝试添加以下涉及vars和if语句的代码时 它上面的所有代码都停止工作。 为了节省时间,上面的每个代码只是以下代码的一个微小变量: 奇怪的是,这个人开始使用 ...

2014-05-24 23:55:40 1 40   jquery
7 计时器停止后如何显示新表格

在我的解决方案中,我有2个表单(form1 form2),form1自动检查用户是否存在以及用户是否存在,这些相同的表单称为form2,何时form2出现form1 hide。 发生这种情况是,在form1中,我有一个称为“时钟”的计时器,它允许我控制时间,而当15秒钟时,有人可以调用fo ...

9 当我添加 else 条件时,我的 for 循环停止工作

我正在尝试定义一个 function 以便在 wiki 应用程序中创建一个新页面。 用户应提供标题和内容。 如果标题已经存在于列表中,用户应该会收到一条错误消息。 如果不是,则新条目应与其内容一起保存在列表中。 到目前为止,这是我的代码:def new_page(request): if r ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM