2017-02-19 23 views
1

こんにちは私は関数を持っており、JavaScriptクラスを返していますが、実行時戻り値は未定義です。何らかのグローバル変数に戻り値を設定すると、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-コール – naortor

+0

ポストは非同期です。機能が "結果"を返すとき、投稿は確実に完了していません! – Baro

答えて

2

あなたpost AJAXリクエストは、第三パラメータasyncronousある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

なぜいくつかの人々は正しい答えをdownvotes ?? –

+0

私のdownvoteではなく、コールバックから値を返すことはできません。 – JJJ

+0

@JJJ、はい、申し訳ありませんが、私の間違いです。 –

関連する問題