Пусть функция $ .post возвращает ответ в родительской функции - PullRequest
1 голос
/ 10 ноября 2010

Я получил этот код:

function server_request(module,section,action,data) {
    data['module'] = module;
    data['section'] = section;
    data['action'] = action;
    var responsetxt = null;
    $.post('../application/server.php', data, function(data) {
        responsetxt = data;
    });
    return responsetxt;
}

И это возвращает null?

Что я хочу, чтобы функция server_request возвращала responseText? Но почему-то это не работает, почему? И как дать ему работать?

Ответы [ 2 ]

5 голосов
/ 10 ноября 2010

Вы предоставляете функцию обратного вызова для $ .post, которая будет запускаться при возврате запроса.Функция server_request возвращается немедленно (т. Е. До того, как ответ станет доступен), поэтому responsesetxt будет по-прежнему нулевым.

Чтобы обойти это, вы можете добавить параметр обратного вызова в server_request, а затем выполнить его в анонимной функции, которую вы предоставляете$ .post call:

function server_request(module,section,action,data,callback) {
    data['module'] = module;
    data['section'] = section;
    data['action'] = action;
    $.post('../application/server.php', data, function(data) {
        callback(data);
    });
}

Затем вы можете использовать это как:

$(function() {
    var module = x, section = y, data = z;
    server_request(module, section, data, function(response) {
        $('#result').html(response); // do stuff with your response
    });
});

Проверьте стиль передачи продолжения для получения дополнительной информации (http://en.wikipedia.org/wiki/Continuation-passing_style и http://matt.might.net/articles/by-example-continuation-passing-style/).

3 голосов
/ 17 декабря 2010

Можно получить возвращаемое значение, но только при выполнении синхронного вызова вместо асинхронного:

function server_request(module,section,action,data,callback) {
    data['module'] = module;
    data['section'] = section;
    data['action'] = action;
    responsetxt = $.ajax({
       "url": '../application/server.php', 
       "async": false,
       "type": "POST",
       "data": data
       }).responseText;
    return responsetxt;

}

Помните, что такой синхронный вызов блокирует браузер, пока сервер не ответит.

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