2011-06-21 60 views
1

當我運行下面的代碼時,警告彈出窗口顯示爲undefined。我認爲它會返回true或false。請有人解釋checkLoginStatus()函數如何執行。謝謝。我不明白這個javascript函數是如何執行的

function checkLoginStatus() { 
$.get("func.php", {op:'login_status', r:Math.random()}, function(data) { 
    if (data == "Yes") { 
     showSalesView(); 
     return true; 
    } else { 
     loginView(); 
     return false; 
    } 
}); 

}

alert(checkLoginStatus()); 
+2

編程101回調:http://en.wikipedia.org/wiki/Callback_%28computer_programming%29 – ChaosPandion

回答

7

有幾件事情是錯誤的。

一,你在函數內部執行一個異步調用,所以在調用返回時,checkLoginStatus已經返回。它本質上是這樣的:

function checkLoginStatus() { 
    $.get("func.php", { 
     op: 'login_status', 
     r: Math.random() 
    }, function(data) { 
     if (data == "Yes") { 
      showSalesView(); 
      return true; 
     } else { 
      loginView(); 
      return false; 
     } 
    }); 
    // return undefined 
} 

其次,你在另一個函數的回調中恢復,從而使收益影響回調至$.get

你想用回調返回值。所以,

function checkLoginStatus(callback) { 
    $.get("func.php", { 
     op: 'login_status', 
     r: Math.random() 
    }, function(data) { 
     if (data == "Yes") { 
      showSalesView(); 
      callback(true); 
     } else { 
      loginView(); 
      callback(false); 
     } 
    }); 
} 

然後

checkLoginStatus(function(result) { 
    alert(result); 
}); 
+0

我幾乎在嘲笑自己,需要快速完成應用程序。謝謝你的時間。 – Chibuzo

1

的AJAX調用是異步的,所以當響應到達時,將執行您指定的回調函數。代碼不會等待響應退出checkLoginStatus函數。

可以使用回調方法來顯示結果:

function checkLoginStatus(callback) { 
    $.get("func.php", {op:'login_status', r:Math.random()}, function(data) { 
    if (data == "Yes") { 
     showSalesView(); 
     callback(true); 
    } else { 
     loginView(); 
     callback(false); 
    } 
    }); 
} 

checkLoginStatus(function(status){ alert(status); }); 
1

返回的布爾正在由$.get回調函數,而不是checkLoginStatus返回。

function checkLoginStatus() { 
    $.get("func.php", {op:'login_status', r:Math.random()}, 

     // Start Callback Function 
     function(data) { 
      if (data == "Yes") { 
       showSalesView(); 
       return true; 
      } else { 
       loginView(); 
       return false; 
      } 
     // End Callback Function 

    }); 
} 
1

你看到的是從獲得()函數未定義(void)返回, 通知細心一點,不用彷徨函數調用包含另一個函數的第三個參數(第一個是URL,第二個是anon對象),它是.get函數結果的「回調」,稍後在從服務器返回結果時調用它。