Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

274
Views
Error 404 en una solicitud POST de Ajax a Flask

Estoy trabajando en una aplicación web que involucra un mapa. Estoy tratando de enviar la ubicación actual del mapa desde mi index.js al servidor del matraz para su procesamiento. Recibo una solicitud POST incorrecta 400 con el error

He estado pensando en esto, pero no he sido capaz de resolverlo. Aquí está mi código lateral de Flask. Aquí puede ver que siempre exceptúa y el servidor del matraz recibe un dict vacío:

 from flask import Flask, render_template, request app = Flask(__name__, template_folder='templates') @app.route('/', methods=["GET"]) def index(): return render_template("index.html") @app.route('/', methods=["POST"]) def post(): if request.method == 'POST': try: data = request.json['data'] print(data) except Exception as e: data = {} print(e) return data if __name__ == "__main__": app.run(debug=True)

y esta es la función donde trato de enviar la ubicación a través de ajax:

 function success(pos){ const posi = { lat: (pos.coords.latitude), lng: (pos.coords.longitude), }; alert(posi.lat) $.ajax({ method : "POST", url : "/", data: posi, contentType: 'application/json', success: function(result) { alert("yay"); },error: function(XMLHttpRequest, textStatus, errorThrown) { alert("Status: " + textStatus); alert("Error: " + errorThrown); } }); }

He usado la API de geolocalización aquí. Esta función anterior es llamada por la siguiente línea:

navigator.geolocation.getCurrentPosition(success, error, options);

He probado los valores con alertas, y parece que se está disparando el éxito. Sin embargo, parece que no puedo entender por qué esto no funciona. Intenté usar data: {'data': posi} en su lugar, pero no funcionó.

¡Gracias!

Editar: también agregué una asignación de la variable 'datos' en la cláusula de excepción, pero parece que está predeterminado de todos modos.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Si examina lo que se pasa en el cuerpo de la solicitud, verá que data se convierten en parámetros de URL (consulte a continuación). Primero debe convertir los datos a una cadena JSON. A continuación, el JSON de la solicitud no está envuelto en un dict adicional con 'data' como única clave. Tampoco necesita el bloque if .

 from flask import Flask, render_template, request app = Flask(__name__, template_folder='templates') @app.route('/', methods=["GET"]) def index(): return render_template("index.html") @app.route('/', methods=["POST"]) def post(): print(request.data) try: data = request.json except Exception as e: data = {'error': repr(e)} return data if __name__ == "__main__": app.run(debug=True)

Hacer una solicitud POST con el siguiente error en el lado de Python:

 $.ajax({ method: 'POST', url: '/', data: {'lat': 12.3, 'lon': 45.6}, contentType: 'application/json', success: function(res){console.log(res);} })

y el request.data impreso da lo siguiente:

 b'lat=12.3&lon=45.6'

y el registro de la consola muestra:

 {'error': "<BadRequest '400: Bad Request'>"}

Entonces puede ver, el cuerpo de la solicitud ajax no es JSON adecuado en absoluto. Para solucionar esto, debemos convertirlo a JSON antes de realizar la solicitud usando JSON.stringify

 $.ajax({ method: 'POST', url: '/', data: JSON.stringify({'lat': 12.3, 'lon': 45.6}), contentType: 'application/json', success: function(res){console.log(res);} })

y ahora el request.data impreso da lo que queremos ver:

 b'{"lat":12.3,"lon":45.6}'

y el registro de la consola también muestra lo que esperamos:

 {lat: 12.3, lon: 45.6}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!