JS函数只返回未定义的数据,但alert输出正确的数据

JS function only returns undefined but alert outputs correct data

本文关键字:数据 alert 输出 返回 未定义 函数 JS      更新时间:2023-09-26

所以我有一个Javascript函数,它从PHP文件中获取名字和姓氏,然后返回值。当此警报时,它确实会产生正确的值,但在返回并调用此变量后,它会产生未定义的值:

function getname(username){
  var output="";
  $.ajax({
    url: 'getusername.php?username='+username,
    type: "GET",
    dataType: "text",
    success: function(data){
      output += data;
      alert(output);
      return output;
    }
  });
}

因此,上面的警报(输出)在警报中生成名称:"John Doe"。现在,当我在另一个函数中调用这个函数时:

var username = 'jdoe';
var uname='';
uname += getname(username);
alert("Username: "+username+"'nName: "+uname)

这将输出Username:jdoe Name:undefined。我已经尝试了多种方法,但当它在警报中正确输出时,返回的值似乎是未定义的。

我曾试图将变量定义为字符串,然后在其后添加值,但没有成功,我在这里缺少什么?感谢

您可以这样做:

试试这个:

var username = 'jdoe';
getname(username).done(function(data) {
   uname += data;
   alert("Username: "+username+"'nName: "+uname)
}
function getname(username) {
    return $.ajax({
       url: 'getusername.php?username='+username
    });
}
AJAX是异步的。如果您想返回数据,可以通过传递async: false使调用同步,或者将AJAX承诺返回给将解析该值的调用函数。

所以这将工作

function getname(username){
    return $.ajax({
        url: 'getusername.php?username='+username,
        type: "GET",
        dataType: "text"
    });
}
function callingFunction() {
    var name = getname(username);
    name.done(function(data) {
        /* Perform your operation with the data */
    });
}

试试这个:

function getname(username){
  var output="";
  $.ajax({
    url: 'getusername.php?username='+username,
    type: "GET",
    dataType: "text",
    async: false,
    success: function(data){
      output += data;
      alert(output);
    }
  });
  return output;
}

不过,上面的版本应该可以使用。这里还有回调版本:

function getname(username, callback){
  var output="";
  $.ajax({
    url: 'getusername.php?username='+username,
    type: "GET",
    dataType: "text",
    success: function(data){
      output += data;
      alert(output);
      callback(output);
    }
  });
}
Call gename() as:
getname(your_user_name, function(output){   // this output refers to the value output
  console.log(output);                      // sent from above line callback(output).
})