返回语句在Jquery get方法中不起作用

时间:2018-07-09 16:15:55

标签: javascript jquery return

我有一个功能,可以根据输入的用户ID从数据库中查找用户的名称。但是我在返回名字方面面临困难。

function getName(userID){
     var user = { "username" : userID};
     var name;
     $.get("/getName",user,function(data,status){
         console.log(data);  //prints correct result
         return data;        //but returns undefined
     });
}

返回的值始终是不确定的。调用函数如下所示:

function init(){
     myid = "james123";
     myname = getName(myid);
     console.log(myname);     //always prints undefined
}

如果我尝试将从数据库接收的数据保存在一个变量中,然后再返回,例如:

function getName(userID){
      var user = { "username" : userID};
      var name;
      $.get("/getName",user,function(data,status){
          console.log(data);
          name = data;
      });
      return name;
  }

这也不起作用,我知道是异步的。有什么办法可以使返回工作正常吗?

2 个答案:

答案 0 :(得分:1)

$。get是异步执行的,因此需要回调。您可以这样做:

function getName(userID, callback){
     var user = { "username" : userID};
     var name;
     $.get("/getName",user,function(data,status){
         console.log(data);  //prints correct result
         callback(data);        //but returns undefined
     });
}

然后:

function init(){
     myid = "james123";
     getName(myid, function(myname){
         console.log(myname); 
     });
}

或者通过Promises,您可以:

function getName(userID){
     var user = { "username" : userID};
     var name;
     return new Promise(function(resolve, reject) {
         $.get("/getName",user,function(data,status){
             resolve(data);  //prints correct result
         });
     }
}

然后:

function init(){
     myid = "james123";
     getName(myid).then((myname)=>console.log(myname);
}

并带有异步:

async function init(){
     myid = "james123";
     myname = await getName(myid);
     console.log(myname);
}

答案 1 :(得分:0)

您可以使用较低级别的ajax方法,因为与较高级别的get相比,它可以自定义更多呼叫设置

其中一项设置可让您禁用异步调用,即强制代码停止并等待获取完成,然后再继续执行async: false,其用法如下:

function getName(userId) {
   var user = { "username" : userID};
   var name;
   $.ajax({
      url: "/getName",
      data: user,
      type: "GET",
      async: false,
      success: function (data) {
          name = data;
      },
   });
   return name;
}