Как написать функцию jQuery с обратным вызовом? - PullRequest
8 голосов
/ 27 апреля 2011

У меня есть следующая функция:

function loadProjects(pID) {

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

Я вызываю эту функцию примерно так: loadProjects (1);

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

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

Спасибо

Ответы [ 6 ]

22 голосов
/ 27 апреля 2011
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.
});
2 голосов
/ 27 апреля 2011

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

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 голос
/ 27 апреля 2011

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

function loadProjects(pId, callback) {

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

}

Вы также можете прочитать документацию MDC (function.call ()) .

1 голос
/ 27 апреля 2011
function loadProjects(pID, callback) {

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

}

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

loadProjects(111, function() { alert('hello!'); });
0 голосов
/ 27 апреля 2011

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

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 */);
0 голосов
/ 27 апреля 2011
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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...