为什么AJAX没有发送正确的POST数据?
问题描述:
当人输入输入表单时,我希望它将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)
答
var request = $.ajax({
type: 'POST',
url: 'login/ajax_check_username_availability',
data: {username: string},
dataType: 'json'
});
因为你发送请求数据用户名字符串,而不是username_signup - 变化的数据:
data: {username_signup: string},
答
是的,你在你使用的要求做在参数“数据”中的taq“用户名”。如果你改变这个“username_signup”,你会在你的php中获得“username_signup”。像这样
var request = $.ajax({
type: 'POST',
url: 'login/ajax_check_username_availability',
data: {username_signup: string},
dataType: 'json'
});
答
简单,你只是做了场ID为“username_signup”但你没有更改代码在Ajax调用请更正下面的代码
var request = $.ajax({
type: 'POST',
url: 'login/ajax_check_username_availability',
data: {username_signup: string},
dataType: 'json'
});
希望它可以帮助... ...
尝试你的'完整的网址'作为发布网址 –
因为你在阿贾克斯请求中使用'用户名' –
哦,我的天哪。哇。我不相信我没有看到那一个。我很习惯在提交POST数据后使用输入字段的名称作为POST数据名称,我忽略了AJAX发送的内容。谢谢! –