2017-02-19 154 views
1

嗨,我有函数,它返回一个JavaScript类,但在运行时返回值是未定义的。当我将返回值设置为某个全局变量时,它在Chrome开发者控制台上给了我正确的结果。为什么会发生?Javascript函数类对象返回undefined

enter image description here

var globalData; 

$(document).ready(function(){ 

var request = postRequest("contact", dt, elem); 

     globalData = request; 

     console.log(request.status); //this gaves me undefined 

}); 


function returnObj(status, message, projects) { 
    this.status = status; 
    this.message = message; 
    this.projects = projects; 
} 



function postRequest(method, vars, elem) { 

    var result = new returnObj(); 

    $.post('api.aspx', 
     { 
      method: "test" 
     }, 
     function (data, status) { 
      var resultObject = $.parseJSON(data); 

      result.status = resultObject.status; 
      result.message = resultObject.message; 
      result.projects = resultObject.projects; 


     }); 

    return result; 

} 
+0

http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-电话 – naortor

+0

帖子是异步的,当函数返回“result”后肯定还没有完成! – Baro

回答

2

post AJAX请求接受作为第三参数callback函数,它是asyncronous。

return result;陈述将在callback完成之前调用,这就是您收到undefined的原因。

我建议您创建一个callback函数。

function postRequest(method, vars, elem,callback) { 
             ^^^^^^^^ 
    var result = new returnObj(); 
    $.post('api.aspx', 
     { 
     method: "test" 
     }, 
     function (data, status) { 
      var resultObject = $.parseJSON(data); 
      result.status = resultObject.status; 
      result.message = resultObject.message; 
      result.projects = resultObject.projects; 
      callback(result); 
    }); 
} 

如何调用函数:

postRequest(method, vars, elem, function(result) { 
    console.log(result); 
}); 
+0

为什么有些人低估了正确答案? –

+0

不是我的倒退,但你不能从回调中返回一个值。 – JJJ

+0

@JJJ,是的,对不起,我的错。 –