Pregunta

Quiero hacer peticiones GET asíncronas y para tomar diferentes resultados en función de la entrada que proporciono a cada uno. Aquí está mi código:

param=1;
$.get('http://localhost/my_page_1.php', param, function(data) {
   alert("id = "+param);
   $('.resul   5.t').html(data);
});

param=2;
$.get('http://localhost/my_page_2.php', param, function(data) {
   alert("id = "+param);
   $('.result').html(data);
});

El resultado de ambas solicitudes es: "ID = 2" Quiero que los resultados sean: "Id = 1" para la solicitud primero, y "Id = 2" para la segunda ..

Quiero hacer esto por muchas solicitudes en uno archivo HTML e integrar los resultados en el HTML tan pronto como estén listos.

Puede alguien ayudarme a solucionar este problema?

¿Fue útil?

Solución

Debido a que sus llamadas son asíncronas, las devoluciones de llamada no se ejecutan hasta que todas las líneas anteriores ya ha ejecutado. Este parámetro medios se establece en el valor 2 antes de su solicitud se resuelve primero conseguir.

Crear nombres únicos para sus variables como param1, param2, en lugar de sólo la reasignación de parámetro.

Editar:

Salida este código:

    for (var i = 0 ; i < 3; i++) {
        param = i;
        $.get('http://www.google.com',genCallback(param));
        param = i+5;
    }

    function genCallback(param) {
        var cb = function (data) {
            alert(param);
        }
        return cb;
    }

Sinceramente, no estoy muy seguro de cómo funciona. Se dará cuenta de que alerta el número 0, 1, 2 en un cierto orden, a pesar de que estoy en constante cambio parámetro. En lugar de crear una función anónima en el get directamente, creo una función basada en el parámetro. Lo que creo que pasa es un cierre se crea sobre cb que incluye el parámetro local del genCallback en el momento en que se ejecuta.

Otros consejos

Cuando se llama a una función de AJAX, la devolución de llamada de esa solicitud se maneje fuera de sincronía con el resto de su código. La función especificada que se llamará cuando la petición es terminada no se llama antes de que ... la solicitud está terminado.

Así es como su código más a menudo (debido a la naturaleza asíncrona de AJAX) funcionaría:

  1. establece param = 1 y enviar la primera petición ajax
  2. establece param = 2 y envía la segunda petición ajax
  3. Primera llamada get se terminó. La devolución de llamada para esta llamada se procesa. La variable de param es ahora 2
  4. Segunda llamada get se terminó. La devolución de llamada para esta llamada se procesa. La variable de param siendo 2

La solución sería tener diferentes variables para cada llamada o para param incremento y enviar la segunda llamada ajax dentro de la función de devolución de llamada de la primera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top