Saltar al contenido

La solicitud Ajax GET se envía dos veces

No dudes en compartir nuestra web y códigos en tus redes, necesitamos tu ayuda para hacer crecer nuestra comunidad.

Solución:

Con su última actualización, debo decir que esta no es una solicitud duplicada. Con su registro que dice que una solicitud fue de Mozilla en una máquina basada en Windows, y la otra solicitud proviene de Chrome en una Mac, son simplemente 2 solicitudes diferentes provenientes de dos ubicaciones diferentes que están cerca una de la otra en el tiempo. Incluso si fuera una prueba de una máquina virtual, no debería registrar los múltiples sistemas operativos o navegadores, ya que la VM se encargará de todas las traducciones, evitando confusiones como esta.

No incluye direcciones IP, pero si son direcciones públicas (como en algo que no sea 127.xxx, 10.xxx o 192.xxx), definitivamente son dos usuarios diferentes que están usando su software al mismo tiempo. hora.

Si está rastreando que es el mismo usuario, podría ser simplemente que esté usando su software en 2 dispositivos diferentes (como una computadora de escritorio o un teléfono móvil). Si eso no está permitido, asegúrese de que su acceso lo refleje. Si se puede rastrear a través de DNS a diferentes ubicaciones geográficas, es posible que tenga una cuenta comprometida para bloquear hasta que el usuario real pueda confirmar su identidad.

Independientemente de cómo lo corte, con los nuevos datos, no creo que sea realmente su software, a menos que pueda reproducirlo a través de pruebas, incluso de manera algo confiable. Tómese el tiempo para considerar que podría No ser un bicho, pero otra cosa. Los desarrolladores de software están condicionados a pensar que todo es un error y su culpa, cuando podría ser algo benigno o un ataque malicioso que podría no haberse considerado previamente.

¡Buena suerte y espero haberte dado algo en qué pensar!

¡Gracias a todos los que respondieron. En última instancia, pude resolver este problema con dos soluciones diferentes:

1) Primero, pude bloquear la solicitud infractora al verificar la IP en el backend:

@app.route('/submit_time')
def submit_time():
   _ip = flask.request.environ.get('HTTP_X_REAL_IP', flask.request.remote_addr)
   if _ip == '128.177.108.218':
     return flask.jsonify('route':'UNDEFINED-RESULT'.lower())
   return flask.jsonify("html":'

Added timestamp

')

Lo anterior es realmente más un truco temporal, ya que no hay garantía de que la IP de destino permanezca igual.

2) Sin embargo, descubrí que ejecutar HTTPS también eliminó la solicitud duplicada. Originalmente, estaba cargando mi aplicación desde el tablero de Pythonanywhere, lo que resultó en http://www.testsite.com. Sin embargo, una vez que instalé un certificado SSL adecuado, actualicé la página y ejecuté la solicitud nuevamente, descubrí que se produjo el resultado deseado.

Le estoy otorgando la recompensa a @computercarguy ya que su publicación me incitó a pensar en las razones externas/relacionadas con la red por las que mi intento original estaba fallando.

Solución muy inusual, pero debería funcionar (si no, creo que el problema no se puede resolver con js).

EDITADO: ¡Verifique la ID enviada en la solicitud ajax! (¡Así que verifique en el lado del servidor!) Seguro que será una identificación única, por lo que puede probar con este @computercarguy si tiene razón o no.

let ids = []

function generateId(elem) 
    let r = Math.random().toString(36).substring(7)

    while ($.inArray(r, ids) !== -1) 
        r = Math.random().toString(36).substring(7)
    

    ids.push(r)
    elem.attr("id", r)


$(document).ready(function() 
    $(".wrapper").find(".submit_stamp").each(function() 
        generateId($(this))
    )

    console.log(ids)
);

function ajaxHandler(stampElem, usedId)     
    let testData = new FormData()
    testData.append("time", stampElem.data('timestamp'))
    testData.append("ID", usedId)

    $.ajax(
        url: "/submit_time",
        type: "get",
        data: testData,
        success: function(response) 
            $('.wrapper').append(response.html);
            generateId(stampElem);

            if (stampElem.attr("id").length) 
                console.log("new id:"+stampElem.attr("id"));
            
        ,
    );



$(".wrapper").on("click", ".submit_stamp", function(ev) 
    ev.preventDefault()
    ev.stopImmediatePropagation()

    if ($(this).attr("id").length) 
        let id = $(this).attr("id")

        $("#"+id).one("click", $.proxy(ajaxHandler, null, $(this), id))

        $(this).attr("id", "")
    
);

Calificaciones y comentarios

Acuérdate de que tienes autorización de valorar esta noticia si descubriste tu impasse a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *