2011-06-21 8 views
1

次のコードを実行すると、警告ポップアップが未定義と表示されます。私はそれが真か偽かのどちらかを返すだろうと思った。 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

物事間違ったカップルがあります。

1つは、関数内で非同期呼び出しを実行しているため、呼び出しが戻ってくるまでに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 
} 

第2の戻りはあなたがコールバックを使用したい$.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によって返されています。何を見ていることに.get()関数から未定義の(無効)リターンです

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

は、 予告慎重に.get関数呼び出しは、第一、第二され、URLであること(第3パラメータとして別の関数が含まれていることanonオブジェクト)は、.get関数の結果の "コールバック"であり、結果がサーバから返されたときに後で呼び出されます。

関連する問題