2016-12-03 93 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

变更后的功能名称来解决。

相关问题