2010-11-17 13 views
14

Estoy usando $ .ajax para publicar datos en el servidor. Sin embargo, quiero pasar un parámetro adicional a la devolución de llamada 'éxito' para decirle a la función de devolución de llamada el ID del elemento HTML para el que responde.

¿Es posible? Me gusta:

success_cb(data, elementid) 
{ 
    (update the elementid with the server returned data) 
} 

$.ajax({ 
    ... 
    success:success_cb(elementid) 
}); 
+0

La mejor solución sería utilizar realmente OOP , en lugar de pasar identificaciones a elementos alrededor. :) – WhyNotHugo

Respuesta

13
function postForElement(elementId){ 
    $.post('/foo',someValues,function(data){ 
    $(elementId).html("The server returned: "+data); 
    },'json'); 
} 

Al declarar la función literal en el mismo alcance que la variable local elementId, la función se convierte en un cierre que tiene acceso a la variable local. (O algunos podrían decir que solo se convierte en cierre cuando el literal de la función también hace referencia a la variable no global que no está definida en su alcance. Eso es simplemente bromear con palabras.)

20

Es posible. Pruebe algo como:

function success_cb(data, elementid) 
{ 
    (update the elementid with the server returned data) 
} 

$.ajax({ 
    ... 
    success:function(data){ success_cb(data, elementid); } 
}); 
+3

Esto (envolver la devolución de llamada en una función anón) es una respuesta tan directa que no puedo creer que no haya pensado en ello de inmediato. :-) – Jez

+0

esto funcionó para mí también, pero me pregunto ... sé que ha pasado mucho tiempo, ¿puedes explicar por qué tiene que ser así? como ... ¿por qué no puedes hacer 'success: function (data, elementid) {}' (me doy cuenta de que hay códigos de estado y tal, de manera realista la pregunta es por qué no se puede 'success: function (data) , textStatus, jqXHR, elementid) {} ​​') – james

Cuestiones relacionadas