當人輸入輸入表單時,我希望它將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)
嘗試你的'完整的網址'作爲發佈網址 –
因爲你在阿賈克斯請求中使用'用戶名' –
哦,我的天哪。哇。我不相信我沒有看到那一個。我很習慣在提交POST數據後使用輸入字段的名稱作爲POST數據名稱,我忽略了AJAX發送的內容。謝謝! –