Я получаю эту ошибку
Ошибка создания пользователя: FirebaseError: Функция DocumentReference.set () вызвана с неверными данными. Неподдерживаемое значение поля: undefined (найдено в поле diabetesComplication)
, и я думаю, что проследил проблему, которая связана с процессом получения всех входных данных флажков и их сохранения в массиве. Я также знаю, что мне нужно использовать код JSON.stringify()
, прежде чем я сохраню их в пожарном депо.
В любом случае, мне нужна помощь в точном определении причины проблемы. Потому что в прошлом я успешно получал этот процесс сохранения массива прямо в firestore.
Вот код:
. JS
$('#registerForm').on('submit', async function (e) {
e.preventDefault();
var data = {
email: $('#email').val(), //get the email from Form
firstName: $('#fname').val(), // get firstName
lastName: $('#lname').val(), // get lastName
sex: $('#sex').val(),
birthDate: new Date($('#bday').val()),
diabetesType: parseInt($('#dtype').val()),
weight: parseInt($('#weight').val()),
height: parseInt($('#height').val()),
};
var allergyList = [];
var cou = i.counter;
for (c = 0; c <= cou; c++) {
var allergyField = document.getElementById("allergy" + c).value;
allergyList.push(allergyField);
AllergyString = JSON.stringify(allergyList)
};
var arrayComplications = [];
var checkboxes = document.querySelectorAll('input[type=checkbox]:checked');
for (var i = 0; i < checkboxes.length; i++) {
JSON.stringify(arrayComplications.push(checkboxes[i].value))
}
var passwords = {
password : $('#password').val(), //get the pass from Form
cPassword : $('#cpassword').val(), //get the confirmPass from Form
}
if( data.email != '' && passwords.password != '' && passwords.cPassword != '' ){
if( passwords.password == passwords.cPassword ){
//create the user
firebase.auth().createUserWithEmailAndPassword(data.email, passwords.password).then(function(user){setTimeout(function(){
console.log('uid',user.user.uid);
usersRef.doc(user.user.uid).set({
'email': data.email, 'firstName': data.firstName,
'lastName': data.lastName, 'allergies': allergyList,
'sex': data.sex, 'birthDate': firebase.firestore.Timestamp.fromDate(data.birthDate),
'diabetesType': data.diabetesType, 'diabetesComplication': arrayComplications,
'weight': data.weight, 'height': data.height, 'firstLogin': true,
})}, 3000)
.then(function(){
console.log("User Information Saved:", user.user.uid);
window.alert("User Created!");
window.location.href = "patientDashboard.php";
})
})
.catch(function(error){
console.log(arrayComplications);
console.log("Error creating user: ", error);
console.log("Error creating user: ", user.user.uid);
window.alert("Error creating user:" + error);
});
}
}
});
Вот код:
HTML
<div class="col-md-6 pl-1">
<div class="form-group">
<label>Diabetes Complication</label>
<br>
<input type="checkbox" name="type" value="No Complications" /><b>No Complications</b>
<br>
<input type="checkbox" name="type" value="Retinopathy" /><b>Retinopathy</b>
<br>
<input type="checkbox" name="type" value="Neuropathy" /><b>Neuropathy</b>
<br>
<input type="checkbox" name="type" value="Nephropathy" /><b>Nephropathy</b>
<br>
<input type="checkbox" name="type" value="Cardiovascular"/><b>Cardiovascular</b>
</div>
</div>
</div>
Обратите внимание, что код
var allergyList = [];
var cou = i.counter;
for (c = 0; c <= cou; c++) {
var allergyField = document.getElementById("allergy" + c).value;
allergyList.push(allergyField);
AllergyString = JSON.stringify(allergyList)
};
- это то, что я ссылаясь ранее на успешное выполнение всего процесса сохранения.
РЕДАКТИРОВАТЬ
Вот код, с которым у меня возникают проблемы:
var arrayComplications = [];
var checkboxes = document.querySelectorAll('input[type=checkbox]:checked');
for (var i = 0; i < checkboxes.length; i++) {
JSON.stringify(arrayComplications.push(checkboxes[i].value))
}
Я не могу получить значения флажков, сохранить в массив, сериализовать его и сохранить в firestore.