Как заставить этого члена класса JavaScript возвращать значение? - PullRequest
1 голос
/ 30 мая 2010

У меня есть класс JavaScript, у которого есть метод:

function someClass() {
    this.someMethod = someClass_someMethod;
}

function someClass_someMethod() {
    // make an AJAX request
}

Проблема в том, что someClass_someMethod() необходимо вернуть значение запроса AJAX.

Я использую метод jQuery $.getJSON() для извлечения данных. Данные должны быть возвращены, но, кажется, единственный способ получить данные - это обратный вызов.

Как это можно сделать?

Ответы [ 3 ]

1 голос
/ 30 мая 2010

Вместо того, чтобы беспокоиться обо всех кросс-браузерных проблемах, которые могут возникнуть при написании вашего AJAX с нуля, я бы порекомендовал использовать стандартную инфраструктуру отрасли, такую ​​как jQuery, для обработки ваших запросов, как вы делаете в настоящее время. Как отметил Делан Азабани, он асинхронный, и это распространенный запрос среди новичков в асинхронной связи.

function someClass_someMethod(callback) {
    $.getJSON(..., function(data) {
        // process the data here...
        callback(data);
    );
}

Теперь вы можете сделать это:

var someClass = new someClass();
someClass.someMethod(function(data) { 
   ... handle your preprocessed data here ...
});

В этом ответе нет новых понятий, только примеры кода.

1 голос
/ 30 мая 2010

В этом коде someClass_someMethod собирается сделать не асинхронный запрос и вернуть значение. Таким образом, ничего не будет выполнено, пока запрос не закончится, что позволит вам вернуть значение.

function someClass() {
    this.someMethod = someClass_someMethod;
}

function someClass_someMethod() {
    var ret = {};
    $.ajax({
        url: url,
        dataType: 'json',
        success: function(data) {
            ret = data;
        },
        async: false
    });
    return ret;
}
1 голос
/ 30 мая 2010

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

Обратный вызов на самом деле является единственным способом, так как вам нужно подождать любое произвольное количество времени, чтобы запрос был либо успешным, либо ошибочным.

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