当人员输入输入表格时,我希望它将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框架)
答案 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},