Выполнение функции после выполнения асинхронной операции - PullRequest
1 голос
/ 01 декабря 2011

У меня возникли некоторые проблемы, потому что я пытаюсь повторно использовать код (который можно использовать) в других частях моего приложения.

Теперь у меня есть общее:

$.ajax({
   url: JSONurl,
   dataType: "json",
   cache: false,
   data: params,
   success: function(data){
      // do stuff after the result is retrieved
   }
});

Все идет хорошо, но я бы хотел сделать что-то подобное:

function ultramegafunction (){
    var ajax_data = asyncAjaxFunction();
    // When ajax_data is filled do other stuff
}

Таким образом, я мог бы использовать asyncAjaxFunction() в других функциях там, где это необходимо, без необходимости переписывать весь код и помещать конкретные вещи в часть успеха.

Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Используйте объекты jQuerys Deferred, которые неявно смешиваются с объектом jXHR. Поэтому вам нужно return объект jXHR, а затем также привязать обработчики в другом месте.

function asyncAjaxFunction() {
    return $.ajax({
        url: JSONurl,
        dataType: "json",
        cache: false,
        data: params,
        success: function(data){
           // do stuff after the result is retrieved
        }
    });
}

и где-то еще

function ultramegafunction (){
    asyncAjaxFunction().done(function( ajaxData ) {
        // When ajax_data is filled do other stuff
    });
}

Ссылка: http://api.jquery.com/category/deferred-object/

0 голосов
/ 01 декабря 2011

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

"asyncAjaxFunction" = function(options){
    var xhr = $.ajax( {
        'url' : options.url,
        'dataType' : (options.dataType) ? options.dataType : 'JSON',
        'type' : (options.type) ? options.type : 'GET',
        'async' : (options.async) ? options.async : false,
        'data' : (options.data) ? options.data : '',
        'cache' : (options.cache) ? options.cache : false,
        'success' : (options.success)? (options.success) :function(data) {
        },
        'error' : (options.error)? (options.error) :function() {
        }
    });
    return (xhr.status === 200) ? xhr.responseText : '';

}

Теперь вы можете вызывать asyncAjaxFunction () из любого места с соответствующими параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...