【发布时间】:2021-02-26 09:15:00
【问题描述】:
我目前正在尝试制作一份调查问卷,让用户对图像进行评分。我想将用户评价图像的值与他们评价的图像一起推送到数据库。我目前正在将其打印到控制台日志,但无法将其发送到数据库。它表示单选按钮的数据不是对象。这是我第一次使用firebase,对JS的经验很少。
function validate() {
var radio = document.getElementsByName("answer");
var checked = false;
for (var i = 0; i < radio.length; i++) {
if (radio[i].checked) {
checked = true;
break;
} else {
checked = false;
}
}
if (checked) {
for (var i = 0; i < radio.length; i++)
{
if (radio[i].checked)
{
selected = (radio[i].value)
window.sessionStorage.setItem("selected", JSON.stringify(selected));
console.log(selected)
changeImage();
}
}
} else {
alert("You must select an answer!")
}
}
var currentImage = 0;
var imageArray = ["/Users/rate/images/images/practice/sun1.jpg", "/Users/rate/images/images/practice/sun2.jpg", "/Users/rate/images/images/practice/sun3.jpg", "/Users/rate/images/images/practice/sun4.jpg"]
function changeImage(){
if (currentImage >= imageArray.length - 1) {
writeToDB();
} else {
currentImage += 1;
}
document.getElementById("mainImage").src = imageArray[currentImage]
img = imageArray[currentImage].slice(-8)
console.log(img)
window.sessionStorage.setItem("selected", JSON.stringify(img));
}
function writeToDB() {
var selected = JSON.parse(window.sessionStorage.getItem("selected"));
var firebaseConfig = {
apiKey: "***",
authDomain: "**",
databaseURL: "**",
projectId: "**",
storageBucket: "**",
messagingSenderId: "**",
appId: "**",
measurementId: "**"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
var db = firebase.firestore();
db.collection("selected").doc().set(selected)
.then(function () {
console.log("Document successfully written!");
})
.catch(function (error) {
console.error("Error writing document: ", error);
});
}
<!DOCTYPE html>
<html>
<head>
<title> App Icons </title>
<link rel="stylesheet" type="text/css" href="/Users/rate/css/mainstyle.css">
<script type="text/javascript" src="/Users/rate/js/main.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-analytics.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.0.0/firebase-storage.js"></script>
</head>
<body class="body">
<div>
<div>
<hr>
<div class=topbar>
<h1> Do you find this App Icon aesthically pleasing</h1>
</div>
<hr>
<div class=image>
<img src="/Users/rate/images/images/practice/sun1.jpg" id="mainImage"/>
</div>
<hr>
<div class=answer>
<div id=answer>
<label> Strongly Agree </label>
<label><input type="radio" name="answer" value="1" required><span>1</span></label>
<label><input type="radio" name="answer" value="2" required><span>2</span></label>
<label><input type="radio" name="answer" value="3" required><span>3</span></label>
<label><input type="radio" name="answer" value="4" required><span>4</span></label>
<label><input type="radio" name="answer" value="5" required><span>5</span></label>
<label> Strongly disagree</label>
<hr>
</div>
</div>
<div class=complete>
<input type="button" onclick="validate()" value="I am complete">
</div>
</body>
【问题讨论】:
-
您正在尝试将图像 src 字符串写入数据库,但没有识别任何类型的键。实际上,您并没有尝试使用实际文档来更新集合。在您的特定情况下,拥有一个带有名为
images的键的文档可能是有意义的,并且让该键包含一个真正的数组。然后,在更新中,您读取数组并[...arr, selected]将其添加到该数组中。 -
是的,我很高兴将图像 src 字符串写入数据库,以便确定该图像的速率!我会怎么做你的建议?
标签: javascript arrays json firebase google-cloud-firestore