0

我的代码是这样的

    var key,value;     
   //……some code……    
   function checkReg(i,j){    
       $.getJSON(api_checkExists,{"k":i,"v":j,"rand":Math.random()},function(c){    
           alert(c.status);    
           return(c.status);    
       });      
   }        
    var temp=checkReg(key,value);    
    alert(temp);   

问题是当我在浏览器中运行它时,它总是先警告未定义然后警告返回值;似乎无法获取函数 checkReg 的返回值。我很困惑,我该怎么办?

4

2 回答 2

4

那是因为您的 ajax 调用与其他调用异步运行。在触发 ajax 之前,您的代码已经返回。

所以返回不是那样工作的,你应该为你的函数提供一个回调而不是试图返回它。

function checkReg(i,j, callback){    
       $.getJSON(api_checkExists,{"k":i,"v":j,"rand":Math.random()},function(c){    
           alert(c.status);    
           callback(c.status);    
       });      
   }        
    checkReg(key,value, function(temp){
          alert(temp);   
    }); 
于 2013-04-08T10:22:20.227 回答
0

你不能那样做......因为ajax是ashynchronus......当成功函数被调用并返回时,警报将被调用,因此temp为未定义或空......一种方法是做你需要的事情到 getJSON 回调的成功内部...或使用$.defered或调用回调函数..

function checkReg(i,j, callback){    
   $.getJSON(api_checkExists,{"k":i,"v":j,"rand":Math.random()},function(c){    
       callback(c.status);    
   });      
}        
checkReg(key,value, function(temp){
      alert(temp);   
}); 
于 2013-04-08T10:22:37.537 回答