让$ .post函数返回父函数中的响应

时间:2010-11-10 17:57:46

标签: javascript jquery ajax

我收到了这段代码:

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 个答案:

答案 0 :(得分:5)

您正在为$ .post提供回调函数,该函数将在返回请求时运行。 server_request函数立即返回(即在响应可用之前),因此responsetxt仍为null。

要解决此问题,您可以向server_request添加一个回调参数,然后在您提供给$ .post调用的匿名函数中执行它:

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_stylehttp://matt.might.net/articles/by-example-continuation-passing-style/)。

答案 1 :(得分:3)

您可以获取返回值,但仅在执行同步调用而不是异步调用时:

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;

}

请记住,像这样的同步调用会冻结浏览器,直到服务器响应。