2017-02-19 217 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,是的,對不起,我的錯。 –