Возникла проблема с методом обратного вызова для этого вызова jQuery getJSON AJAX - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть служебный файл .js, который собирает некоторые данные через Ajax.Теперь этот служебный метод не знает, кто его будет вызывать.

Поэтому, когда асинхронность Ajax завершается, ему необходимо отправить объект обратно вызывающей стороне.Я не уверен, как это сделать: (

Это код, который у меня есть ...

function someMethod(a, b, c) {
    // ... stuff ...

    // Now fire it off, asynchronously!
    var request = $.getJSON(url, function (jsonResult) {
        var result =
        {
            json: jsonResult,
            contentLength: request.getResponseHeader("Content-Length")
        };

        // TODO: Now return this result to the caller.
    });
}

конечно, я не могу использовать return result;, потому что это асинхронныйЯ чувствую, что мне нужно передать параметр, который является функцией, которую должен вызывать код ajax выше, когда результат был асинхронно завершен. Просто не знаю как ... потому что помните ... этот метод понятия не имеет, ктоназывая это .. так что он не знает ни о каких других методах и прочем.

Есть идеи, пожалуйста?

1 Ответ

3 голосов
/ 22 ноября 2010

Вы правы. Вам нужно будет передать функцию "someMethod", чтобы вы могли вернуть ей данные. В зависимости от того, что делает функция обратного вызова, вам также может понадобиться правильно установить ее контекст, используя методы call или apply. «Контекст» - это то, что будет установлено ключевым словом «this» в функции обратного вызова.

Если ваша функция обратного вызова не делает никаких ссылок на ключевое слово "this", тогда вы можете игнорировать использование call () или apply () и просто вызывать функцию, как во втором примере. (например, обратный вызов (результат));

function someMethod(a, b, c, callback, context) {
    // ... stuff ...

    // Now fire it off, asynchronously!
    var request = $.getJSON(url, function (jsonResult) {
        var result =
        {
            json: jsonResult,
            contentLength: request.getResponseHeader("Content-Length")
        };

        // Now return this result to the caller. With the context set
        callback.call(context, result);

        // Example of callback without setting the context
        //callback(result);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...