2015-07-21 75 views
0

我有一个函数将返回一个AJAX响应并在另一个函数上使用它。这里是我的代码:JavaScript回调函数在我的情况下不起作用

function updateLoanApproval(answer){ 
    var password = document.getElementById("password").value; 
    var usid; 
    getExistingId(function(success){ 
     if (success === 0){ 
      var usid = "No ID Available"; 
     } else { 
      var usid = success; //To get the returning value 
     } 
    }); 

    alert(usid); 

,这里是为getExistingId()的代码

function getExistingId(){ 
    var url = "../../library/functions.php?action=getId"; 
    var uid; 
    http.onreadystatechange = function(){ 
     if (http.status == 200 && (http.readyState === 4)){ 
      uid = http.responseText; 
      if (uid == "No ID"){ 
       callback(0); 
      } else { 
       callback(id); 
      } 
     } 
    } 

    http.open("GET",url,true); 
    http.send(); 
} 

正如我测试的代码,我没有与查询或PHP代码,所以我的问题不包括它在这里,但为什么usid总是返回undefined?

+0

看起来像你只需要移动你的警惕回调里面。 – JohnnyFun

回答

1

请仔细看看,您在getEdiistingId()函数中缺少回调参数。不喜欢以下内容:

function getExistingId(callback){ 
var url = "../../library/functions.php?action=getId"; 
var uid; 
http.onreadystatechange = function(){ 
    if (http.status == 200 && (http.readyState === 4)){ 
     uid = http.responseText; 
     if (uid == "No ID"){ 
      callback(0); 
     } else { 
      callback(id); 
     } 
    } 
} 

http.open("GET",url,true); 
http.send(); 

}

并把警报回调方法里面。

function updateLoanApproval(answer){ 
    var password = document.getElementById("password").value; 
    var usid; 
    getExistingId(function(success){ 
     if (success === 0){ 
      var usid = "No ID Available"; 
     } else { 
      var usid = success; //To get the returning value 
     } 
     alert(usid); 
    }); 

需要usid的方法:

function doMyTaskThatNeedUsid(usid) 
{ 
    // do something. 
} 

,并调用方法类似以下内容:

function updateLoanApproval(answer){ 
    var password = document.getElementById("password").value; 
    var usid; 
    getExistingId(function(success){ 
     if (success === 0){ 
      var usid = "No ID Available"; 
     } else { 
      var usid = success; //To get the returning value 
     } 

     // Calling method that need usid. 
     doMyTaskTaskThatNeedUsid(usid); 
    }); 
+0

仍然输出是undefined :( –

+0

你有没有把alertLoadApproval方法 – chandil03

+0

它现在的工作,但有没有任何可能的解决方案,如果我希望变量usid的价值函数调用updateLoanApproval函数外? –

相关问题