簡體   English   中英

數據沒有被推送到 Firebase(不一致的行為)

[英]Data not getting pushed to firebase (inconsistent behaviour)

我正在嘗試在 firebase 數據庫中推送可疑記錄,一切正常,但推送部分似乎不起作用。 它很少起作用,不是每次都起作用。 這是函數:

async function storeSuspectData() {
var name = document.getElementById("name").value;
var height = document.getElementById("height").value;
var weight = document.getElementById("weight").value;
var idnumber = document.getElementById("idnumber").value;
var dob = document.getElementById("dob").value;
var crime = document.getElementById("crime").value;
var hypo = document.getElementById("hypo").value;
var gender;

if (document.getElementById("male").checked) {
    gender = 'male';
}
else if (document.getElementById("female").checked) {
    gender = 'female';
}
console.log(sessionStorage.getItem("userKey") + ' ' + name + ' ' + height + ' ' + weight + ' ' + idnumber + ' ' + dob + ' ' + gender + ' ' + crime + ' ' + hypo);

console.log('/users/' + sessionStorage.getItem("userKey") + '/suspectList/');

let token = await database.ref('/users/' + sessionStorage.getItem("userKey") + '/suspectList/');

await token.push().set({
    name: name,
    height: height,
    weight: weight,
    idnumber: idnumber,
    dob: dob,
    gender: gender,
    crime: crime,
    hypo: hypo,
});

alert('Record added successfully');
}

最后一條警報語句沒有被執行,數據也沒有被推送

這是數據庫

在此處輸入圖片說明

我也在控制台上收到此錯誤,但我沒有在任何地方使用 document.write()

BrowserPollConnection.ts:480 [Violation] Avoid using document.write().

當我單擊調用該函數的按鈕時,頁面正在刷新,因為該按鈕是表單中的提交按鈕。 我明白了

Navigated to file:///D:/MyPrograms/CredibilityAnalyzer/front-end/pages/selectSuspect.html?name=afs&crime=0&height=1&weight=1&idnumber=1&dob=2021-01-01&hypo=asdf&gender=none

這是 HTML 代碼:

<!DOCTYPE html>
<html>

<head>
    <title>Credibility Analyzer</title>
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css"
        integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
        integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel="stylesheet" type="text/css" href="../style/selectSuspect.css">


    <script src="https://www.gstatic.com/firebasejs/8.7.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.7.1/firebase-database.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.7.1/firebase-analytics.js"></script>
    <script src="../script/form2.js"></script>

</head>

<body onload="fillSuspectList()">
    <div class="testbox">
        <form>
            <div class="banner">
                <h1>Credibility Analyzer</h1>
            </div>
            <div class="btn-block">
                <button type="submit" onclick="showInputForm()">Enter new suspect record</button>
                <button type="submit" onclick="showSelectSuspect()">Select suspect</button>
            </div>
            <div class="showInputForm" id="showInputForm" style="display: none;">
                <p>Suspect Information</p>
                <div class="item">
                    <label for="name">Name<span>*</span></label>
                    <input id="name" type="text" name="name" required />
                </div>
                <div class="btn-block">
                    <button type="submit" onclick="storeSuspectData()">SUBMIT</button>
                </div>
            </div>
    
        </form>
    </div>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
        integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
        integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
        integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
        crossorigin="anonymous"></script>
</body>

</html>

它很少起作用,不是每次都起作用。

這通常表示競爭條件。 在這種情況下,我懷疑您的storeSuspectData在用戶提交表單時被調用。 如果是這種情況:表單的默認行為是將數據發送到服務器,然后重定向到不同的頁面。 因此,除非您的處理程序函數取消此默認行為,否則頁面將被重定向,這可能/將中斷對數據庫的寫入。

對此的解決方案是通過在觸發它的事件上調用e.preventDefault()並從處理程序返回false取消表單的默認行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM