我编写了从.php文件中获取用户名的函数
function pobierzLogin()
{
var myVar= "0";
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
myVar = odp;
});
return myVar;
}
myVar将返回0,但警告(odp);显示出良好的效果。
答案 0 :(得分:2)
Ajax是ASYNCHRONOUS。所以你的函数在为它赋值之前返回变量。这样做:
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
}
})
答案 1 :(得分:2)
这应该可以正常工作。
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
});
答案 2 :(得分:0)
这是因为您的请求发生异步,因此在 pobierzLogin
方法完成后之前不会设置该值,因为请求需要时间才能完成到互联网并返回。
不要执行您正在执行的操作,而是在请求返回时定义要触发的其他方法,并在回调到$.post
时执行该方法。
var whenRequestReturns = function(args){ ... }
$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
{
whenRequestReturns(); // invoke here
});
或者只是做一些像
这样的事情 $.post("logowanie.php", { "logowanie" : 3 }, whenRequestReturns)
答案 3 :(得分:0)
由于alert(odp);
为$.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 );
});