2012-02-28 3 views
1
var ajaxStuff = (function() { 

    var doAjaxStuff = function() { 
     //an ajax call 
    } 

    return { 
     doAjaxStuff : doAjaxStuff 
    } 

})(); 

Есть ли способ использовать этот шаблон и получить ответ от успешного ajaxcall при вызове моего метода? Что-то вроде этого:Javascript module pattern, ajax функции callbacks

ajaxStuff.doAjaxStuff(successHandler(data){ 
    //data should contain the object fetched by ajax 
}); 

Надеюсь, что вы поймете эту идею, иначе я уточню.

+0

Почему не просто $ .ajax ('url'). Success (function (data) {...}); '? – zzzzBov

ответ

3

две вещи: 1. Добавить параметр в функции doAjaxStuff. 2. При вызове doAjaxStuff, передать в анонимную функцию (или имя функции)

var ajaxSuff = (function() { 

var doAjaxStuff = function(callback) { 
    // do ajax call, then: 
    callback(dataFromAjaxCall); 
} 

return { 
    doAjaxStuff : doAjaxStuff 
} 

})(); 

// calling it: 

ajaxStuff.doAjaxStuff(function(data){ 
    //data should contain the object fetched by ajax 
}); 
1

Просто дайте doAjaxStuff принять обратный вызов:

var doAjaxStuff = function(callback) { 
    // an ajax call 
    // Inside the Ajax success handler, call 
    callback(response); // or whatever the variable name is 
} 

В зависимости от ваших общих целей, вы можете также использовать deferred objects вместо (или в дополнение). Это делает ваш код очень модульным. Например:

var doAjaxStuff = function() { 
    // $.ajax is just an example, any Ajax related function returns a promise 
    // object. You can also create your own deferred object. 
    return $.ajax({...}); 
} 

// calling: 

ajaxStuff.doAjaxStuff().done(function(data) { 
    // ... 
}); 
0

Я считаю, что вам нужно прочитать документы JQuery для jQuery.ajax. Вы можете сделать звонок так же просто, как:

$.ajax('/path/to/file').success(function (data) { 
    doStuff(); 
}) 
Смежные вопросы