2014-07-09 69 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' 
    }); 

希望它可以幫助... ...