【问题标题】:can't get input type text via js无法通过js获取输入类型文本
【发布时间】:2019-03-29 14:10:35
【问题描述】:

我在 Udemy 购买了课程来制作登录系统,只是想在 html 中添加更多输入以获取用户名.....但它没有用 我花了大约 15 个小时,仍然不明白为什么它不起作用

<div class="uk-section uk-container">
    <div class="uk-grid uk-child-width-1-3@s uk-child-width-1-1" uk-grid>
        <form class="uk-form-stacked js-register">

            <h2>Register</h2>


            <div class="uk-margin">
                <label class="uk-form-label" for="form-stacked-text">Username</label>
                <div class="uk-form-controls">
                    <input class="uk-input" id="form-stacked-text" type="text" required='required' placeholder="Username">
                </div>
            </div>






            <div class="uk-margin">
                <label class="uk-form-label" for="form-stacked-text">Email</label>
                <div class="uk-form-controls">
                    <input class="uk-input" id="form-stacked-text" type="email" required='required' placeholder="email@email.com">
                </div>
            </div>

            <div class="uk-margin">
                <label class="uk-form-label" for="form-stacked-text">Passphrase</label>
                <div class="uk-form-controls">
                    <input class="uk-input" id="form-stacked-text" type="password" required='required' placeholder="Your passphrase">
                </div>
            </div>

            <div class="uk-margin uk-alert uk-alert-danger js-error" style='display: none;'></div>

            <div class="uk-margin">
                <button class="uk-button uk-button-default" type="submit">Register</button>
            </div>

        </form>
    </div>

jquery 代码:

$(document).on("submit", "form.js-register", function(event) {
event.preventDefault();

var _form = $(this);
var _error = $(".js-error", _form);

var dataObj = {
    username: $("input[type='text']", _form).val(),
    email: $("input[type='email']", _form).val(),
    password: $("input[type='password']", _form).val()
};

if(dataObj.email.length < 6) {
    _error
        .text("Please enter a valid email address")
        .show();
    return false;
} else if (dataObj.password.length < 11) {
    _error
        .text("Please enter a passphrase that is at least 11 characters long.")
        .show();
    return false;
}

// Assuming the code gets this far, we can start the ajax process
_error.hide();

$.ajax({
    type: 'POST',
    url: '/ajax/register.php',
    data: dataObj,
    dataType: 'json',
    async: true,
})
.done(function ajaxDone(data) {
    // Whatever data is 
    if(data.redirect !== undefined) {
        window.location = data.redirect;
    } else if(data.error !== undefined) {
        _error
            .text(data.error)
            .show();
    }
})
.fail(function ajaxFailed(e) {
    // This failed 
})
.always(function ajaxAlwaysDoThis(data) {
    // Always do
    console.log('Always');
})

return false;
})

php 代码:

define('__CONFIG__', true);

// Require the config
require_once "../inc/config.php"; 

if($_SERVER['REQUEST_METHOD'] == 'POST' or 1==1) {
    // Always return JSON format
    // header('Content-Type: application/json');

    $return = [];

    $email = Filter::String( $_POST['email'] );

    // Make sure the user does not exist. 
    $findUser = $con->prepare("SELECT user_id FROM users WHERE email = LOWER(:email) LIMIT 1");
    $findUser->bindParam(':email', $email, PDO::PARAM_STR);
    $findUser->execute();

    if($findUser->rowCount() == 1) {
        // User exists 
        // We can also check to see if they are able to log in. 
        $return['error'] = "You already have an account";
        $return['is_logged_in'] = false;
    } else {
        // User does not exist, add them now. 

        $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
        $username = $_POST['text'] ;
        $addUser = $con->prepare("INSERT INTO users(username,email, password) VALUES(:username,LOWER(:email), :password)");
        $addUser->bindParam(':username', $username, PDO::PARAM_STR);
        $addUser->bindParam(':email', $email, PDO::PARAM_STR);
        $addUser->bindParam(':password', $password, PDO::PARAM_STR);
        $addUser->execute();

        $user_id = $con->lastInsertId();

        $_SESSION['user_id'] = (int) $user_id;

        $return['redirect'] = '/dashboard.php?message=welcome';
        $return['is_logged_in'] = true;
    }

    echo json_encode($return, JSON_PRETTY_PRINT); exit;
} else {
    // Die. Kill the script. Redirect the user. Do something regardless.
    exit('Invalid URL');
}

电子邮件和密码发送到数据库会发生什么(我从课程的源代码中获得) 和我添加的用户名什么都不做..防止页面重定向 我真的认为我犯了一个白痴的错误,但我认为 15 小时的尝试也足够了.. 原谅我 .. 以及我糟糕的英语 谢谢

【问题讨论】:

  • 您发送的用户名是 'username' 键,而不是 'text' 只需更改 $username = $_POST['text'];到 $username = $_POST['username'];如果没有其他问题,它将起作用(或者您可以将 var dataObj = {username: 更改为 text: in jquery)
  • @TrueTiem 还是同样的问题
  • 可以添加错误日志吗?
  • @TrueTiem 将 .error() 添加到 jquery 中的 ajax 没有发生任何事情 .. 在 else 语句之后在 php 中添加了 try 和 catch .. 没有东西发送到数据库,也没有回显错误......控制台也没有错误..我想我可能无法制作错误日志......对不起,我是初学者
  • 嗯,你可以试试 echo $username 和 if ($addUser->execute()){echo "working";}else {$addUser->errorInfo();} 我认为它是一个 php相关错误。并且可能是数据库或 pdo 错误。

标签: php jquery html ajax css-frameworks


【解决方案1】:

在 html 中编辑它

<div class="uk-form-controls">
    <input class="uk-input" name="username" type="text" required='required' placeholder="Username">
</div>

并在 ajax 中编辑 dataobj

var dataObj = {
    username: $("input[name='username']", _form).val(),
    email: $("input[type='email']", _form).val(),
    password: $("input[type='password']", _form).val()
};

并从html中删除所有id,因为您为每个html标签(用户名,电子邮件,密码)定义了相同的id,如果多个html标签具有相同的id,javascript将抛出错误

【讨论】:

  • 只有一个文本类型的输入。问题不存在。
  • 是的,我知道,只需删除所有 id 或定义文本框的不同 id,否则 javascript 将无法正常工作,您可以在控制台中看到错误
  • 在 dataobj "console.log(dataobj.username)" 之后试试这个,看看你是否在控制台中获取用户名
  • 你是在问还是告诉我 jquery 成功地控制了控制台中的用户名?请回复您在控制台中获得的数据
  • 我试图 console.log 用户名 .. 或将其放入 if() 和其他 .. 字面上没什么!一切都一样..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2013-11-04
  • 2023-03-20
  • 2012-02-24
  • 1970-01-01
  • 2013-12-08
相关资源
最近更新 更多