あなたの2番目の質問に最初に答えるには、 $。post()
関数が非同期 Ajaxリクエストを開始します。これは、 $ post()
関数自体がすぐに戻り、次のコード行(この場合は alert()
)で実行が継続することを意味します。そして、コールバックとしてAjaxリクエストが $ post()
に提供された無名関数を完了すると、その関数に alert()
も含まれていれば表示されます。
あなたの最初の質問について:関数内の this
の値は、関数がどのように呼び出されたかによって決まり、jQueryは通常コールバック関数を呼び出すときにそれを設定しますが、あなたのUserMenuオブジェクト最も簡単な回避策は、 retrieve()
関数のローカル変数に this
を保存してから、その変数をコールバックから参照することです。
var UsersMenu = function(){
this.returnUsers = [];
this.retrieve = function(posts){
var self = this,
temp = [];
$.post("router.php", { "action": "getUsersMenu", "posts" : posts},
function(data)
{
if(data.response){
for(var i=0; i
Ajaxコールバックが実行されるまでに retrieve()
関数が終了しても、JavaScriptクロージャの魔法は内側の匿名関数がそれらのローカル変数にアクセスできることを意味します。