javascript - 为什么 AJAX 不发送正确的 POST 数据?

标签 javascript php jquery ajax codeigniter

当用户在输入表单中键入内容时,我希望它将 POST 数据发送到 PHP 服务器并检查他们的用户名是否尚未被使用。

输入的名称为 username_signup,但由于某种原因,浏览器 [chrome 和 firefox] 发送的输入名称为 username(我确实使用了 username 最初是在我编码时,但我将其切换为 username_signup 并保存了所有内容)。这真的很烦人,因为我不知道是什么导致它发送 POST 输入名称 username 而不是正确的 username_signup

我的 JavaScript:

$('body').on('keyup', '#username_signup', function(event) {
        /*
         * Set string variable
         */
        var string = $('#username_signup').val();

        /*
         * Set validations
         */
        $('input').alphanum();
        $('#username_signup').alphanum({
            allowSpace: false,
            maxLength: 32
        });

        /*
         * Set AJAX variable.
         */
        var request = $.ajax({
            type: 'POST',
            url: 'login/ajax_check_username_availability',
            data: {username: string},
            dataType: 'json'
        });

        /*
         * When ajax successfully completed
         */
        request.done(function(data) {
            if (data.status === true)
            {
                $('#signup_presubmit').prop('disabled', false);
                $('#username_check_fail').hide();
                $('#username_check_fail').empty();
                $('#username_check_success').show();
                $('#username_check_success').html(data.username + ' is not taken!');
            }
            else if (data.status === false)
            {
                $('#signup_presubmit').prop('disabled', true);
                $('#username_check_success').hide();
                $('#username_check_success').empty();
                $('#username_check_fail').show();
                $('#username_check_fail').html(data.username + ' has already been taken!');
            }
            else if (data.status === 'nostring')
            {
                $('#signup_presubmit').prop('disabled', true);
                $('#username_check_success').hide();
                $('#username_check_success').empty();
                $('#username_check_fail').show();
                $('#username_check_fail').html('Username needs to be at least 2 character long!');
            }
        });

        /*
         * When ajax fails
         */
        request.fail(function(data) {
            alert('Error! AJAX did not complete successfully');
        });
    });

我的看法:

<form action="<?php echo base_url(); ?>login/signup" method="post" role="form" accept-charset="utf-8" class="form-horizontal">
    <!-- Username -->
    <div class="form-group">
        <input value="<?php echo set_value('username_signup'); ?>" type="text" class="form-control" id="username_signup" name="username_signup" placeholder="username">
        <p id="username_check_success" style="color: green; font-size: .7em; margin-top: 1em; margin-bottom: 0em"></p>
        <p id="username_check_fail" style="color: red; font-size: .7em; margin-top: 1em; margin-bottom: 0em"></p>
    </div>


    <button type="submit" class="btn btn-primary">sign up (for real this time)</button>
</form>

我的 Controller :

function ajax_check_username_availability()
    {
        $data['status'] = true;
        $data['username'] = strtolower($this->input->post('username_signup'));
        if (strlen($data['username']) < 2)
            $data['status'] = 'nostring';
        else
        {
            $query = $this->db->get_where('users', array('username' => $data['username']));
            if ($query->num_rows() > 0)
                $data['status'] = false;
        }
        echo json_encode($data);
    }

所以最后,浏览器发送 $_POST['username'] 而不是(逻辑)$_POST['username_signup']

知道是什么造成了这种烦恼吗? (我正在使用 Codeigniter 框架)

最佳答案

是的,您按照在参数“数据”中使用的请求执行任务“用户名”。如果将其更改为“username_signup”,您将在 php.ini 中获得“username_signup”。像这样

    var request = $.ajax({
        type: 'POST',
        url: 'login/ajax_check_username_availability',
        data: {username_signup: string},
        dataType: 'json'
    });

关于javascript - 为什么 AJAX 不发送正确的 POST 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24648377/

相关文章:

javascript - 如何选择:after element using jquery

javascript - 如何在 React v16.6 中的新 CONTEXT API 中获取多个静态上下文

php - Zend 3 + Doctrine 2 创建表格?

javascript - 通过 jQuery/Javascript 添加悬停 CSS 属性

javascript - jQuery + CSS : How to detect the first "move out" of cursor out of an element?

javascript - 自定义错误验证消息未显示

javascript 在博主帖子中不起作用

javascript - 如何创建 "Magnet Links"

php - 使用 php 和 pdo 执行 .sql 文件

javascript - 单击链接时使用 AJAX 替换内容