为什么AJAX没有发送正确的POST数据?

时间:2014-07-09 08:05:15

标签: 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>

我的控制器:

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框架)

3 个答案:

答案 0 :(得分:1)

是的,您在参数&#34; data&#34;中使用的请求中执行了操作。 taq&#34;用户名&#34;。如果您将其更改为&#34; username_signup&#34;你得到&#34; username_signup&#34;在你的PHP。喜欢这个

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

答案 1 :(得分:1)

简单地说,您只需将字段ID设为&#34; username_signup&#34;但是你还没有改变ajax调用中的代码,请将其改为下面的代码

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

希望它有所帮助......

答案 2 :(得分:0)

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

因为您要发送请求数据用户名字符串而非 username_signup - 将数据更改为:

data: {username_signup: string},