2011-04-27 5 views
7

я следующую функцию:Как написать функцию jQuery с обратным вызовом?

function loadProjects(pID) { 

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

Я вызывать эту функцию как так loadProjects (1);

Проблема Я хочу, чтобы иметь возможность определить функцию callBack после успеха, и я хотел бы включить ее, когда я загружаю объекты (1, callback: {независимо от того, что js включен сюда, возвращается после успеха})

Как я могу использовать функцию для обратного вызова? Как передать ответ на эту функцию?

Благодаря

+0

Все спасибо. Но я хочу, чтобы обратный вызов был тем, что я хочу. Я не хочу, чтобы callback был статичным? – AnApprentice

+0

См. Мой ответ ...? – mattsven

+0

Еще раз спасибо, но все это статические обратные вызовы, это не позволяет мне определять такие вещи, как callbackfunc (22) – AnApprentice

ответ

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

Использование:

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

+1 для правильного предположения, что он хотел передать параметры для обратного вызова – mVChr

+1

@mVChr Я смеялся, когда читал это. – jessegavin

+0

Этот вопрос заслуживает -1 за плохую формулировку. – mattsven

2

Вот как вы можете изменить вашу функцию так, что она может принимать обратный вызов.

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

Вот как вы его используете.

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

loadProjects(123, myCoolCallback); 

Или вы можете использовать его с анонимной функцией.

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

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

} 

Призывая что-то вроде этого:

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

но как я могу передать параметры для обратного вызова? – 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

Попробуйте это:

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

Вы можете передать функцию другой функции, как если бы это был любой другой объект. Проверьте это:

function loadProjects(pId, callback) { 

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

} 

Вы могли бы также прочитать на the MDC documentation (function.call()).

Смежные вопросы