从$ .post获得成功结果

时间:2015-02-08 03:53:05

标签: jquery ajax

我很难弄清楚如何从jquery / ajax获得成功结果。我试图调用外部函数以确保..将结果设置为全局是...全局?我了解范围如何工作,但它似乎在这里工作。所以也许我不了解jquery的范围?以下是我现在所处的位置 - 大量的试验和错误。在这种情况下,使用数据警报[' test']会给我我想要的结果,但是当我调用setSession()时,设置session_results不起作用。

*编辑 - 我刚注意到脚本没有等待$ .post完成,所以我的问题就出现了。回调函数,根据这里提出的其他问题。有人有例子或推荐吗?否则,可以关闭此线程。

**编辑 - 感谢Cuong Le。

// SESSION
var session_results;
function setSession(data) {
    session_results = data;
}
function SESSION() {
    $.post(
        "handler.php",
        { get_session: "get_session" },
        function(data) {
            alert(data['test']);
            setSession(data);
        },
        "json"
    );
}

SESSION();
alert(session_results['test']);

2 个答案:

答案 0 :(得分:1)

你应该等到ajax帖子完成然后你能够正确警告alert(session_results);,在jquery中使用promise概念:

var session_results;
function setSession(data) {
    session_results = data;
}

function SESSION() {
    var promise = $.post(
        "handler.php",
        { get_session: "get_session" },
        function(data) {
            alert(data['test']);
            setSession(data);
        },
        "json"
    );

    return promise;
}

var result = SESSION();

result.done(function(){
    alert(session_results);
});

要获得更多更正,您应该使用done函数使用jquery ajax的新语法:

function SESSION() {
    var promise = $.post( "handler.php",  { get_session: "get_session" })
                    .done(function(data) {
                        alert(data['test']);
                        setSession(data);
                    });

    return promise;
}

答案 1 :(得分:0)

这是因为AJAX代表异步 JavaScript和XML。您的下次通话无法保证完成。所以你可以做的是:

var session_results;
function setSession(data) {
    session_results = data;
}
function SESSION() {
    $.post(
        "handler.php",
        { get_session: "get_session" },
        function(data) {
            alert(data['test']);
            setSession(data);
            alert(session_results['test']); //moved to here
        },
        "json"
    );
}

SESSION();

或者您可以$.ajax使用async关闭。