Php 在codeigniter中使用ajax和jquery检查用户名的可用性
在这里,我试图检查用户名输入是否可供用户使用。我在codeigniter中做这件事。 这是我的查看页面:Php 在codeigniter中使用ajax和jquery检查用户名的可用性,php,javascript,jquery,ajax,codeigniter,Php,Javascript,Jquery,Ajax,Codeigniter,在这里,我试图检查用户名输入是否可供用户使用。我在codeigniter中做这件事。 这是我的查看页面: <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/j
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<style type="text/css">
.no{color:red;}
.yes{color:green;}
</style>
<script>
$(document).ready(function(){
// unique user name checking ------------- starts here----------------
$("#username").blur(function(){
var form_data= {
action : 'check_username',
username : $(this).val
};
$.ajax({
type: "POST",
url : "check_unique_username",
data : form_data,
success : function(result) {
$("#message").html(result.message);
alert(result);
}
});
});
// unique username checking -------------- ends here-----------------
});
</script>
</head>
<body>
<form class="RegistrationForm" id="RegistrationForm" method="POST" action="">
<label for="username">User Name</label>
<div>
<input id="username" name="username" size="25" class="required" />
</div>
<input type="button" id="button1" name="button1" value="check availability" />
<div id="message"></div>
</form>
</body>
.no{颜色:红色;}
.yes{颜色:绿色;}
$(文档).ready(函数(){
//唯一用户名检查-----------------从此处开始----------------
$(“#用户名”).blur(函数(){
变量形式_数据={
操作:“检查用户名”,
用户名:$(this).val
};
$.ajax({
类型:“POST”,
url:“检查唯一用户名”,
数据:表格数据,
成功:功能(结果){
$(“#message”).html(result.message);
警报(结果);
}
});
});
//唯一用户名检查-----------------到此结束-----------------
});
用户名
这是我的控制器代码:
<?php
class Registration extends MX_controller {
function index(){
$this->load->view('registrationPage'); // this will load the registration page.
}
function unique_username() {
$action = $_POST['action'];
if($action=='check_username'){
$u = $this->input->post('username');
$users=array("jhon","neo","margo","hacker","user123");
if(in_array($u,$user)) {
echo json_encode(array('message' => "It is not available!"));
}
else {
echo json_encode(array('message' => "It is available!"));
}
}
}
}
?>
但是我的代码不起作用,哪里出了问题,请帮我解决。只显示它对每个用户名都可用
已编辑:我已更改控制器代码…您在使用div的id时未使用#
,因此请使用:
$("#message").html(result);
而不是
$(“message”).html(结果)代码>编辑:更新问题的更新答案
实际上这很愚蠢,我们都看不到,但问题是这个字符串:username:$(this.val
)。原因是.val不是jQuery获取文本字段值的方法,它应该是用户名:$(this).val()
(带括号)
这涵盖了第一个JS部分,下一个问题是输入错误,您有url:“检查\u唯一\u用户名”
,但它应该是url:“注册/唯一\u用户名”
(没有控制器名称,并且在控制器中方法没有前缀时有不必要的检查\u
)
下一个输入错误是在PHP中-if(in_array($u,$user)){
,但我们有一个数组$users
,所以将其更改为if(in_array($u,$users)){
,这样PHP就不会抛出通知
下一个问题是AJAX请求中缺少的数据类型:'json',
。我们必须放置它,以便JS能够知道我们正在接收的数据类型,并以正确的方式解析它
在那之后它应该可以工作了。但是我有一些建议给你。更改PHP,这样它就不会返回字符串,而是返回一个布尔值。例如-true,如果它可用,false,如果它不可用
if(in_array($u,$users)) {
echo json_encode(array('message' => false));
} else {
echo json_encode(array('message' => true));
}
这样,在JS代码中操作此数据就更容易了。例如,您可以将此代码添加到AJAX请求的成功部分:
success : function(result) {
if(result.message) {
$("#message").html("It's available!");
$("#button1").removeAttr('disabled');
} else {
$("#message").html("It's not available!");
$("#button1").attr('disabled','disabled');
}
}
您将启用/禁用“提交”按钮。这将确保普通用户在输入用户名时无法提交表单
另外,我会将事件blur
更改为keyup
,这样更新速度会更快,但服务器上的更新会更繁重。blur
事件的问题是,用户可以填充用户名并单击按钮,因为blur事件只有在用户离开元素后才会触发
希望这有帮助!“我的代码不工作”-如何?它做错了什么?@forsvarir代码不工作
意味着它没有显示用户名是否可用。你的代码不工作:)你的代码的哪一部分不工作?什么服务器返回?你的firebug在哪里?我可以看到你正在使用hmvc,发布你的文件夹结构真的会有帮助。我认为url:“check\u unique\u username”应该是一个php文件。您是否检查了url:“check\u unique\u username”是否真的给出了回复?如果您使用的是chrome,请按ctrl+shift+i,然后选择控制台并在此处评论您看到的内容欢迎使用Stack Overflow!将来,请花更多时间撰写或格式化您的文章。可以找到格式化帮助@Matt:谢谢您在格式化方面的帮助。我将花更多时间格式化答案。@Avinasse:-请在成功函数中添加警报(结果)并检查它返回的内容。感谢@Vlakarados的回复,但我的代码不起作用的原因。我这样做了,但这种方式也不起作用,没有检查用户可用性:(使用chrome或Firefox与firebug一起查看AJAX响应是什么-在chrome precc Ctrl+Shift+C中,打开网络,让您的页面执行AJAX请求,您将看到它显示在列表中,打开它并查看预览选项卡。您收到了什么数据?在firebug中显示:-在控制台中发布200 OK 44ms,操作我正在获取获取此页面。{“message”:“它是可用的!”
在成功
部分尝试:警报(result.message)
。此外,我注意到我的答案中有一个拼写错误,应该是$(“#message”).html(result.message);
,尝试这两个部分,看看是否出现了什么