2017-02-19 32 views
1

Привет, ребята У меня есть функция, и она возвращает класс javascript, но в runtime возвращаемое значение не определено. Когда я устанавливаю возвращаемое значение для некоторой глобальной переменной, это дает мне правильный результат на консоли разработчика Chrome. Почему это происходит?Объект класса функции Javascript, возвращающий неопределенный

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- call – naortor

+0

Сообщение is async, когда функция возвращает «результат», сообщение наверняка еще не закончено! – Baro

ответ

2

Ваш запрос post Аякса принимает в качестве третьего параметра в callback функцию, асинхронный.

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, да, извините, моя ошибка. –