JS函数只返回undefined但alert输出正确的数据

时间:2013-12-17 13:29:31

标签: javascript jquery

所以我有一个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)

这将输出用户名:jdoe名称:undefined。我已经尝试了多种方法来实现这一点,但是当它实际在警报上正确输出时,它似乎是未定义的。

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

3 个答案:

答案 0 :(得分:0)

不是让你的ajax同步,你可以这样做:

试试这个:

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

答案 1 :(得分:0)

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 */
    });
}

答案 2 :(得分:-1)

试试这个:

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).
})