Múltiples peticiones GET HTTP Ajax con diferentes variables de entrada usando jQuery
-
04-10-2019 - |
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?
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:
- establece
param = 1
y enviar la primera petición ajax - establece
param = 2
y envía la segunda petición ajax - Primera llamada get se terminó. La devolución de llamada para esta llamada se procesa. La variable de
param
es ahora 2 - 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.