JavaScript - 函数不会返回良好的价值

时间:2012-10-06 20:07:52

标签: javascript jquery function return

  

可能重复:
  How can I return a value from an AJAX request?

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

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

myVar将返回0,但警告(odp);显示出良好的效果。

4 个答案:

答案 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 );
});