Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
Actualización de variables globales AJAX POST

A continuación se muestra mi archivo JS completo de principio a fin. Configuré una variable 'rendida' fuera de todas las funciones. Luego, dado que se requiere en la verificación de si justo antes de emitir una solicitud POST, quiero usarlo como indicador y actualizar su valor para que sea verdadero al finalizar la solicitud posterior. El problema es que todas las llamadas a console.log imprimen el valor modificado pero no persiste. Cuando nuevamente las coordenadas de posición se recuperan automáticamente en la función watchPosition, la función de cálculo de distancia se invoca nuevamente. Entonces, el valor guardado anterior con "window.rendered = true" no está allí, en realidad es falso y entra en la condición if. ¿Cómo puedo lograr el objetivo de no volver a emitir la solicitud de publicación hasta que otra solicitud de publicación cambie esta variable de indicador a falso?

 var rendered = false; function myfunc() { rendered = true; console.log(window.rendered); } function updatePosition() { if(navigator.geolocation) { navigator.geolocation.watchPosition(calculateDistance); } else { console.log("Geolocation is not supported by this browser.") } } function calculateDistance(position) { var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); var target = new google.maps.LatLng(55.85365783555865, -4.288739944549508); var dis = google.maps.geometry.spherical.computeDistanceBetween(pos, target); console.log(window.rendered); var self = this; if(dis <= 1000 && dis >= 0 && window.rendered == false) { console.log("Distance"+dis); var url = '/dogpark/near_park/'; var csrftoken = getCookie('csrftoken'); $.ajax({ url: url, type: "POST", data: { csrfmiddlewaretoken: csrftoken, in_proximity : 1 }, async: false, success: function(data) { myfunc(); self.rendered = true; window.rendered = true; alert(window.rendered); window.location = '/dogpark/near_park/'; }, complete: function(data) { console.log("Trying"); window.rendered = true; alert(window.rendered); }, error: function(xhr, errmsg, err) { console.log(xhr.status+": "+xhr.responseText); }, }); } window.onload = updatePosition()
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Una forma simple es usar otra variable para rastrear la finalización de la llamada ajax. Para que no realice otra llamada Ajax hasta que la anterior devuelva una respuesta (éxito/fracaso).

 var isWaitingForResponse = false; ... function calculateDistance(position) { ... if(dis <= 1000 && dis >= 0 && window.rendered == false && !isWaitingForResponse) { isWaitingForResponse = true; ... success: function(data) { isWaitingForResponse = false ... }, complete: function(data) { isWaitingForResponse = false ... }, error: function(xhr, errmsg, err) { isWaitingForResponse = false ... } ...
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda