可能重复:
如何从 AJAX 请求返回值?
我编写了从 .php 文件中获取用户名的函数
function pobierzLogin()
{
var myVar= "0";
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
myVar = odp;
});
return myVar;
}
myVar 将返回 0,但 alert(odp); 显示出良好的结果。
可能重复:
如何从 AJAX 请求返回值?
我编写了从 .php 文件中获取用户名的函数
function pobierzLogin()
{
var myVar= "0";
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
myVar = odp;
});
return myVar;
}
myVar 将返回 0,但 alert(odp); 显示出良好的结果。
这应该工作得很好。
function pobierzLogin()
{
var myVar= "0";
return $.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
return odp;
});
}
我不时使用它,并且每次都能成功运行。
更新
在@user1689607 的帮助下,这应该是
function pobierzLogin()
{
return $.ajax({
url : "logowanie.php",
type : "post",
dataType: "json",
data: {
"logowanie": 3
}
})
}
pobierzLogin().done(function(odp){
//... do stuff
});
Ajax 是异步的。因此,您的函数在为其赋值之前会返回变量。这样做:
function pobierzLogin(callback)
{
var myVar= "0";
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
callback(odp);
});
}
然后像这样使用它:
pobierzLogin(function(odp){
//do smthing with odp
});
编辑:
您可以在 ajax 参数中设置 async: false ,在这种情况下 ajax 调用将是同步的:
return $.ajax({
url : "logowanie.php",
type : "post",
dataType: "json",
async: false,
data: {
"logowanie": 3
}
})
这是因为您的请求是异步发生的,因此在 方法完成之前不会设置该值pobierzLogin
,因为请求需要时间才能到达互联网并返回。
不要做你正在做的事情,而是定义一些你想在请求返回时触发的方法,并在你的回调中执行它到$.post
.
var whenRequestReturns = function(args){ ... }
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
whenRequestReturns(); // invoke here
});
或者只是做类似的事情
$.post("logowanie.php", { "logowanie" : 3 }, whenRequestReturns)
您 alert(odp);
必须按原样在 post 的回调$.post
中asynchronous
。
修改后的代码:
function pobierzLogin(cb)
{
var myVar= "0";
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
myVar = odp;
cb(odp):
});
return myVar;
}
pobierzLogin(function(myVar ){
alert(myVar );
});