Tengo los siguientes archivos HTML:
<!DOCTYPE html> <html> <body> <input id = "input_thing"> <button id="demo" onclick="myFunction()">Click me.</button> <script src='script.js'></script>JS:
function myFunction() { var x = document.getElementById("input_thing").value; const Http = new XMLHttpRequest(); const url=' https://*****.****.**/doctorapi/'+x; fetch(url).then(function (response) { console.log(response.json()); document.getElementById('demo').innerHTML=response.json(); }) }Esencialmente, estoy tratando de imprimir la respuesta a una solicitud que envío. El sitio web que creé está recibiendo solicitudes.
Aquí hay algo de ese código.
@app.route('/doctorapi/<query>') def next(query): respons = query_search(query) respons=str(respons) response = make_response(jsonify( { "medical_response":respons, "query":query } )) return responsey cuando entro en mi navegador, veo la respuesta. Sin embargo, el JS no obtiene ese JSON y los registros y la cadena vacía. ¿Cómo puedo solucionar esto? ¿Cuál es la forma correcta de enviar una solicitud>
La función json() del objeto de respuesta es asíncrona. Por lo tanto, devuelve un objeto del tipo Promise . Para obtener el resultado final, debe esperarse con la palabra clave await o procesarse en un then posterior.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form name="search-form"> <input type="text" name="query" /> <button type="submit">Click me</button> </form> <output name="search-result"></output> <script type="text/javascript"> (() => { const formElem = document.querySelector('form[name="search-form"]'); formElem.addEventListener('submit', event => { event.preventDefault(); fetch(`/doctorapi/${encodeURIComponent(event.target.query.value)}`) .then(resp => resp.json()) .then(data => { const outElem = document.querySelector('output[name="search-result"]'); outElem.innerHTML = JSON.stringify(data); }); }); })() </script> </body> </html> @app.route('/doctorapi/<query>') def search(query): data = 'my-search-result' return jsonify(query=query, results=data)