1

Hi Guys I have function and it's returning a javascript class but at runtime returning value is undefined. When I set return value to some global variable and it's gave me right result on Chrome developer console. Why is that happening?

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;

}
Mihai Alexandru-Ionut
  • 47,092
  • 13
  • 101
  • 128
PsyGnosis
  • 1,489
  • 6
  • 21
  • 28
  • http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – naortor Feb 19 '17 at 11:48
  • The post is async, when function return "result" the post surely is not yet finish ! – Baro Feb 19 '17 at 11:51

1 Answers1

2

Your post ajax request accepts as a third parameter a callback function which is asyncronous.

return result; statement will be called before the callback is finished and that's the reason you're receiving undefined.

I recommend you to create a callback function.

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);
     });
}

How to call function:

postRequest(method, vars, elem, function(result) { 
    console.log(result);
});
Mihai Alexandru-Ionut
  • 47,092
  • 13
  • 101
  • 128