function formValidation(){ var userid = document.getElementById(usuario); var usermail = document.getElementById(correo); var userpassword = document.getElementById(contrasena); var userpasswordconfirm = document.getElementById(contrasena_conf) if (userpassword == userpasswordconfirm){ var xhr = new XMLHttpRequest(); var data = new FormData(); data.append("Users", userid); data.append("Mail", usermail); data.append("pwd", userpassword); xhr.open("POST", URL, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify({ value: data })); else{ window.alert("Las contraseñas no coinciden"); userpassword.focus(); userpasswordconfirm.focus(); return false; } } }El servidor API está recibiendo {"valor": {}} y se supone que debe recibir la información del usuario. No sé exactamente qué poner en setRequestHeader. Espero me puedan ayudar, gracias de antemano
Envía el objeto FormData. Envía solo el objeto FormData. No intente ser más inteligente que el navegador sobre cuál es el tipo de contenido del objeto FormData. No intente codificar los datos como JSON.
xhr.open("POST", URL, true); // NO! xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(data);Asegúrese de que el código del lado del servidor que analiza esta solicitud pueda manejar datos de formulario codificados en varias partes.
var userid = document.getElementById(usuario);
Es casi seguro que esto quiere ser:
var userid = document.getElementById("usuario").value;Donde tu:
Todos sus campos son texto sin formato, por lo que podría enviar JSON, pero luego necesitaría construir un objeto sin formato y no un objeto FormData (y su código del lado del servidor debería estar preparado para JSON).
function formValidation(){ var userid = document.getElementById("usuario").value; var usermail = document.getElementById("correo").value; var userpassword = document.getElementById("contrasena").value; var userpasswordconfirm = document.getElementById("contrasena_conf").value; if (userpassword != userpasswordconfirm){ window.alert("Las contraseñas no coinciden"); userpassword.focus(); userpasswordconfirm.focus(); return false; } else{ var xhr = new XMLHttpRequest(); var data = new FormData(); data.append("User", userid); data.append("Mail", usermail); data.append("Pwd", userpassword); xhr.open("POST", URL, true); xhr.send(data); } }Gracias por ayudar esto rápidamente, todo está funcionando ahora. Para aquellos que preguntaron, el código de back-end para la API:
@app.route("/route", methods=["POST"]) def add_new_user_data(): username = request.form.get("User") usermail = request.form.get("Mail") userpwd = request.form.get("Pwd") print(username, usermail, userpwd) if username is None: return "The request is null", 400 else: return "ok", 200