2014-07-09 70 views
0

当人输入输入表单时,我希望它将POST数据发送到PHP服务器,并检查他们的用户名是否已被占用。为什么AJAX没有发送正确的POST数据?

输入有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']代替(逻辑)

任何想法是什么造成这种烦恼? (我用笨framwork)

+0

尝试你的'完整的网址'作为发布网址 –

+1

因为你在阿贾克斯请求中使用'用户名' –

+0

哦,我的天哪。哇。我不相信我没有看到那一个。我很习惯在提交POST数据后使用输入字段的名称作为POST数据名称,我忽略了AJAX发送的内容。谢谢! –

回答

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

因为你发送请求数据用户名字符串,而不是username_signup - 变化的数据:

data: {username_signup: string}, 
1

是的,你在你使用的要求做在参数“数据”中的taq“用户名”。如果你改变这个“username_signup”,你会在你的php中获得“username_signup”。像这样

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

简单,你只是做了场ID为“username_signup”但你没有更改代码在Ajax调用请更正下面的代码

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

希望它可以帮助... ...