2011-04-27 18 views
7

I tienen la siguiente función:¿Cómo escribir una función jQuery con una devolución de llamada?

function loadProjects(pID) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) {XXXXXXXXXXXXXXXX} 
    }); 
} 

I llamar a esta función como así que loadProjects (1);

Problema es que quiero ser capaz de definir una función callBack después de éxito, y me gustaría incluirlo cuando lo hago loadProjects (1, devolución de llamada: {lo js incluido aquí se devuelve la llamada después de éxito})

¿Cómo puedo hacer que una función acepte una devolución de llamada? ¿Cómo puedo pasar una devolución de llamada a esa función?

Gracias

+0

Todo el mundo gracias. Pero quiero que la devolución de llamada sea lo que quiera. No quiero que la devolución de llamada sea estática. – AnApprentice

+0

Ver mi respuesta ...? – mattsven

+0

Gracias de nuevo, pero todas estas son devoluciones de llamada estáticas, no me permite definir cosas como callbackfunc (22) – AnApprentice

Respuesta

20
function loadProjects(pID, callbackFunction) 
{ 
    $.ajax({ 
     url: myURL, 
     success: function (dataJS) 
     { 
      if(typeof callbackFunction == 'function') 
      { 
       callbackFunction.call(this, dataJS); 
      } 
     } 
    }); 
} 

Uso:

loadProjects(pID, function(dataJS) 
{ 
    // do stuff with your dataJS, bear in mind you can call the parameter any name. 
}); 
+4

+1 para adivinar correctamente que quería pasar parámetros a la devolución de llamada – mVChr

+1

@mVChr Me reí cuando lo leí. – jessegavin

+0

Esta pregunta merece un -1 por mala redacción. – mattsven

2

He aquí cómo usted puede modificar su función de manera que pueda aceptar una devolución de llamada.

function loadProjects(pID, callback) { 
    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { 
      if ($.isFunction(callback)) { 
      callback.call(); 
      } 
     } 
    }); 
} 

Así es como lo usaría.

function myCoolCallback() { 
    alert("I am cool"); 
} 

loadProjects(123, myCoolCallback); 

O puede usarlo con una función anónima como esta.

loadProjects(123, function() { 
    alert("I am cool"); 
}); 
1
function loadProjects(pID, callback) { 

    $.ajax({ 
     url: myURL, 
     success: function (dataJS) { if (callback) { callback(); } } 
    }); 

} 

La invocación de algo como esto:

loadProjects(111, function() { alert('hello!'); }); 
+0

, pero ¿cómo puedo pasar los parámetros a la devolución de llamada? – AnApprentice

0
function loadProjects(pID, callback) { 
    $.ajax({ 
    url: myURL, 
    success: function (dataJS) { 
     // your initial method declaration goes here 
     ... 

     // just call the callback method at the end of the success method 
     callback(); 
    } 
0

Prueba esto:

var loadProjects = function(pID, callback) { 
    var obj = { url: myURL }; 

    if(typeof callback != "function"){ 
     obj.success = function(dataJS){ 
      loadProjects(1, /* Your callback func here */); 
     }; 
    } else { 
     obj.success = callback; 
    } 

    $.ajax(obj); 
}; 

loadProjects(1, /* Your callback func here */); 
1

Puede pasar una función a otra función como si se tratara de cualquier otro objeto. Mira esto:

function loadProjects(pId, callback) { 

    $.ajax({ 
    url: myUrl, 
    success: function() { 
     callback.call(); // <-- invokes your callback with no args 
    } 

} 

También puede leer sobre the MDC documentation (function.call()).

Cuestiones relacionadas