Проблема обратного вызова с jquery / js / ajax - PullRequest
1 голос
/ 11 октября 2010

UPDATE3 и FINAL: решено благодаря Эвану и Медеру!

UPDATE2: Я должен уточнить, мне нужна функция updateFilters (a,b) для вызова, а не для создания.Функция существует в другом месте.Извините за путаницу.

Код ниже не работает должным образом - udpateFilters(a,b) вызывается до окончания цикла for.Изменение async на false решает проблему, но это кажется неправильным.Более того, updateFilters () вызывается независимо от успеха AJAX.

Что я сделал не так?

save (updateFilters(a,b));

function save (cb) {
    $.ajax ({
         url:'save.php',
         data:somedata,
         async:true,
         success: function (response) {
             for (var i in response) {}

             if (typeof cb!='undefined') cb;
    });
}

function updateFilters (a,b) {
//do some stuff here
}

ОТВЕТ: Поэтому, как предложил медик, я изменил параметр.Это 2/3 ответа!

save (
    (function (a,b) {
        return function () {
            return updateFilters(a,b);
        }
    })(a,b)
);

Теперь измените следующее:

if (typeof cb!='undefined') cb (); //brackets are important!

И все готово!

Ответы [ 2 ]

4 голосов
/ 11 октября 2010

Вы передаете вызов функции, а не функции, которая должна быть вызвана на более позднем этапе. Если вы хотите последнее, сделайте это:

save (
   (function(a,b){
      return function() {
        return updateFilters(a,b)
      }
   })(a,b)
);
1 голос
/ 11 октября 2010

Что касается вашего обновления, вы никогда не вызываете обратный вызов.Это то же самое, что и

x; // does nothing

Вы хотите вызвать обратный вызов:

cb(); // invoke the function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...