Jquery: дождитесь обратного вызова, прежде чем вернуться - PullRequest
7 голосов
/ 17 января 2010

У меня есть функция javascript, которая запрашивает некоторые данные ajax и возвращает объект JSON. Тогда он должен вернуть объект.

Проблема в том, что я не знаю, как заставить функцию возвращаться из обратного вызова Ajax. Конечно

myFunction: function() {
    $.get(myUrl, function(data) {
        return data;
    });
}

не работает, потому что внутренняя функция возвращается вместо внешней.

С другой стороны, выполнение того, что мне нужно, только внутри обратного вызова сломает мое подразделение MVC: этот код находится в модели, и я бы хотел использовать объект результата в контроллере.

Временное решение -

myFunction: function() {
    var result = $.ajax({
        url: myUrl,
        async: true,
        dataType: 'text'
    }).responseText;
    return eval(result);
}

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

Есть ли другие решения?

Ответы [ 2 ]

10 голосов
/ 17 января 2010

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

myFunction: function(callback) {
    $.get(myUrl, function(data) {
        callback( data );
    });
}
1 голос
/ 17 января 2010

Почему вы хотите вернуть объект? Если вы собираетесь использовать этот объект после, лучшим способом было бы поместить функцию, использующую данные , в обратный вызов.

...