我很难弄清楚如何从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']);
答案 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
关闭。