2016-12-03 26 views
3

初めて#submit-loginボタンをクリックします。 ajax呼び出しは成功です。 キャッチされない例外TypeError:しかし、同じボタンをもう一度クリックする上で、私はエラーでヒットしていますuserloginのは関数ではありませんajax second call:関数は関数エラーではありません

HTML:

  <input id="username" type="username" name="" placeholder="Username"> 
      <input id="password" type="password" name="" placeholder="Password"><br> 
      <button type="button" class="btn btn-primary" id="submit-login"> Login</button> 

JSファイル

$("#submit-login").on("click", function(){ 
    userLogin(); 
    }); 
function userLogin(){ 
    userLogin = $("#username").val(); 
    userPass = $("#password").val(); 
     $.ajax({ 
      type: 'POST', 
      url: 'controllers/login.php', 
      data: { 
       'username': userLogin, 
       'password' : userPass 
      }, 
      success: function(responseText) { 
       console.log(responseText); 
      } 
     }); 
}; 
HTMLページへのリンク

PHPファイル

<?php 
$savedUser = "irexjr"; 
$savedPass = "1234"; 

$request_user = $_POST['username']; 
$request_password = $_POST['password']; 

$loginsuccess = ""; 

if(($request_user == $savedUser) && ($request_password == $savedPass)){ 
    echo 1; 
} 
else{ 
    echo 0; 
} 
?> 
+1

関数 'userLogin()'は、同じ名前のグローバル変数を作成します。 'userLogin()'を呼び出した後、それはもはや関数ではなく文字列(ユーザ名) – Andreas

答えて

1

他の解説者があなたに伝えようとしているものは次のとおりです。 グローバルスコープ内に関数userLogin()を宣言します。今度は関数を実行し、関数本体の中で別の変数userLoginを宣言すると、var、letまたはconstを使わずに変数がグローバルスコープになり、すでにそこに上書きされます。だから、あなたは、いくつかのオプションがあります。@TechBreakはすでに

  • が@Thomas Charlesworthは
  • はVARを使用して、関数本体の内部変数を宣言提案としての機能の名前を変更する提案として

    1. 機能を書き換えを入れてみましょうか のconstそれらは関数スコープ内にある

    いずれにしても、var、letまたはconstのない変数は決して宣言しないでください。そうしないと、グローバルスコープになり、追跡が困難なエラーが発生します。

  • 1

    次試してみてください、変数定義されたが、CREですグローバルスコープでatedとコメントで指摘されているように、それは機能と同じ名前を持っており、さらに彼らはそれが必要と思われる必要はありません。

    function userLogin(){ 
    
         $.ajax({ 
          type: 'POST', 
          url: 'controllers/login.php', 
          data: { 
           'username': $("#username").val(), 
           'password' : $("#password").val() 
          }, 
          success: function(responseText) { 
           console.log(responseText); 
          } 
         }); 
    }; 
    
    0

    関数userLogin()は、同じ名前のグローバル変数を作成します。 @Andreas

    により投稿されたよう()を呼び出した後use​​rloginのそれはもはや機能が、文字列(ユーザー名)

    ではありません解決するために、関数名を変更しました。

    関連する問題