2016-12-03 94 views
3

當我第一次單擊#submit-login按鈕時。 ajax調用成功。然而,在點擊相同的按鈕第二次,我擊中了錯誤: 遺漏的類型錯誤:用戶登陸是不是一個函數ajax第二次調用:函數不是函數錯誤

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文件鏈接到HTML頁面

$("#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); 
      } 
     }); 
}; 

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引起變量在全局範圍內結束並覆蓋已經存在的函數 - >函數。所以,你有幾種選擇:

  1. 重寫功能@TechBreak已經提出
  2. 重命名爲@Thomas查爾斯沃思提出
  3. 聲明使用VAR函數體內的變量的函數,出租或 常量放它們在功能範圍內

在任何情況下:永遠不會聲明沒有var,let或const的變量。否則,他們將在全球範圍內造成可能難以追查的錯誤。

1

嘗試之後,定義的變量是CRE在全球範圍內引起注意,並在評論中指出,它具有與功能相同的名稱,並且它們似乎並不是必需的。

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

變更後的功能名稱來解決。

相關問題