-2

可能重复:
如何从 AJAX 请求返回值?

我编写了从 .php 文件中获取用户名的函数

function pobierzLogin()
{
  var myVar= "0";
  $.post("logowanie.php", { "logowanie" : 3 }, function(odp)
  {
    myVar = odp;
  });
  return myVar;
}

myVar 将返回 0,但 alert(odp); 显示出良好的结果。

4

4 回答 4

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
});
于 2012-10-06T20:15:46.070 回答
2

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
    }
})
于 2012-10-06T20:10:36.903 回答
0

这是因为您的请求是异步发生的,因此 方法完成之前不会设置该值pobierzLogin,因为请求需要时间才能到达互联网并返回。

不要做你正在做的事情,而是定义一些你想在请求返回时触发的方法,并在你的回调中执行它到$.post.

var whenRequestReturns = function(args){ ...  }

$.post("logowanie.php", { "logowanie" : 3 }, function(odp)
  {
    whenRequestReturns(); // invoke here
  });

或者只是做类似的事情

$.post("logowanie.php", { "logowanie" : 3 }, whenRequestReturns)

于 2012-10-06T20:09:39.107 回答
0

alert(odp);必须按原样在 post 的回调$.postasynchronous

修改后的代码:

function pobierzLogin(cb)
{
  var myVar= "0";
  $.post("logowanie.php", { "logowanie" : 3 }, function(odp)
  {
     myVar = odp;
      cb(odp):
   });
   return myVar;
 }
 pobierzLogin(function(myVar ){
   alert(myVar );
});
于 2012-10-06T20:09:43.590 回答