2012-03-22 14 views
6

Me gustaría obtener la URL de una función de éxito jQuery, después de que recupera los datos del servidor. Por desgracia, los tres parámetros de la función de toma de éxito no exponen a la URL original:jQuery: obtener la url en la función de éxito

success: function(data, statusText, jqhxr)

Me deshice de la variable jqhxr, y no pudieron encontrar la url en ese país. La razón por la que necesito la url es porque estoy haciendo varias llamadas a la vez a través de un bucle, y por lo tanto no tengo idea de qué llamada Ajax está volviendo. Convertirlo en una llamada asincrónica tampoco ayudó.

¡Gracias de antemano!

+1

Tengo la sensación de que está tomando una ruta incorrecta aquí (1 función que maneja todos los retornos de Ajax) pero ¿no podría simplemente incluir el nombre de la página en JSON que se devuelve desde el servidor? – AndrewR

+1

¿podría volcar la variable "this"? – FreeCandies

+0

+1 para console.log (esto); comentario – Relic

Respuesta

14

this.url dentro éxito la función funcionará porque this se refiere al contexto actual de la función, y dado que la función del éxito es parte del objeto de configuración que está pasando al .ajax(), accederá a la propiedad url.

Vea un artículo que describe js scope y .ajax().

1

quieres decir hacer una llamada sincrónica no ayudó ...?

y mi sugerencia sería establecer un parámetro en los datos que está recibiendo para determinar qué hacer con él, si está pasando por un montón de llamadas AJAX. Pero realmente debería tener que repetir más de una llamada si lo está haciendo bien, debería poder enviar suficientes parámetros junto con los datos para recuperarlo todo en una llamada, esto reduce el número de viajes entre el cliente y el servidor, servidor y base de datos, luego servidor de vuelta al cliente.

1

Probablemente pueda utilizar el contexto al hacer la llamada ajax.

$.ajax({ 
    url: "test1.html", 
    context: $("#call1") 
}); 

$.ajax({ 
    url: "test2.html", 
    context: $("#call2") 
}); 

<div id="call1" class="hidden" data-url="whatever1"></div> 
<div id="call2" class="hidden" data-url="whatever2"></div> 

después en

success: function(data, statusText, jqhxr) { 
    var url = $(this).data("url"); 
} 

De esta manera se puede conseguir cualquier dato, no sólo la url. Ponga cualquier dato que desee acceder en el elemento div correspondiente.

1

Si llama a la secuencia de comandos del servidor a través de jQuery .ajax() o .post() o .get(), debe tener la url disponible en la función de devolución exitosa, incluso si está utilizando un bucle. Esto se debe a que debe pasar la url a estos tres métodos, y el resultado devuelto es específico de la url que aprueba.

Por ejemplo:

for(var i=0; i<10; i++) { 
    url = "action_remote_" + i + ".php"; 
    $.ajax({ 
     type:'POST', 
     url: url, 
     data:$('#' + str_form_id).serialize(), 
     success: function(response) { 
      alert(url); 
     } 
    }); 
} 

A menos que yo no soy la inteligencia que correctamente ...

Cuestiones relacionadas