ajax第二次调用:函数不是函数错误

时间:2016-12-03 10:45:06

标签: jquery ajax login

第一次点击#submit-login按钮时。 ajax调用成功。但是,在第二次单击同一个按钮时,我遇到了错误: 未捕获的TypeError:userLogin不是函数

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>

链接到HTML页面的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);
            }
        });
};

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;
}
?>

3 个答案:

答案 0 :(得分:1)

尝试以下,变量定义是在全局范围内创建的,并且在注释中指出它与函数具有相同的名称,并且它们似乎不是必需的。

function userLogin(){

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

答案 1 :(得分:1)

其他评论员试图告诉您的是以下内容: 您在全局范围内声明函数userLogin()。现在运行该函数并在函数体内部声明另一个变量userLogin而不使用var,let或const导致变量最终在全局范围内覆盖已存在的变量 - &gt;功能。所以你有几个选择:

  1. 将函数重写为已提议的@TechBreak
  2. 将该功能重命名为@Thomas Charlesworth
  3. 使用var,let或声明函数体内的变量 const将它们放在函数范围内
  4. 在任何情况下:永远不要声明没有var,let或const的变量。否则它们将最终进入全球范围,导致可能难以追踪的错误。

答案 2 :(得分:0)

函数userLogin()创建一个具有相同名称的全局变量。在调用userLogin()之后,它不再是函数而是字符串(用户名)

由@Andreas发布

更改了要解决的功能名称。