[英]Ajax user name availability with codeigniter
Tankauth已經具有內置功能來檢查用戶名是否可用。 該功能位於庫和模型中。
庫功能
function is_username_available($username)
{
return ((strlen($username) > 0) AND $this->ci->users->is_username_available($username));
}
模型中的功能
function is_username_available($username)
{
$this->db->select('1', FALSE);
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
return $query->num_rows() == 0;
}
現在我想使用jquery通過使用post方法進行一些ajax檢查。 我想知道最好的方法。
我應該在控制器中創建一個新功能來檢查用戶名是否可用嗎? 請告訴我,jquery必須向哪個url發出請求。
<script type="text/javascript">
$(document).ready(function()
{
$("#username").change(function()
{
var username = $("#username").val();
var msgbox = $("#status");
if(username.length > 3)
{
$("#status").html('<img src="images/loader.gif"> Checking availability.');
$.ajax({
type: "POST",
url: "/index.php/auth/user_availability",
data: "username="+ username,
success: function(msg){
$("#status").ajaxComplete(function(event, request){
if(msg == 'OK')
{
$("#username").removeClass("red");
$("#username").addClass("green");
msgbox.html('<img src="yes.png"> <font color="Green"> Available </font>');
}
else
{
$("#username").removeClass("green");
$("#username").addClass("red");
msgbox.html(msg);
}
});
}
});
}
else
{
$("#username").addClass("red");
$("#status").html('<font color="#cc0000">Enter valid User Name</font>');
}
return false;
});
});
</script>
謝謝 !
我傾向於做的是創建一個名為ajax的控制器,該控制器基本上包含我所有與ajax相關的功能。 這樣,我現在將始終將我的ajax調用指向何處:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Ajax extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->output->set_output("This is an AJAX endpoint!");
}
public function user_availability()
{
$this->load->model("users");
$res = $this->users->is_username_available( $this->input->post("username") );
if( $res )
$this->output->set_output("OK");
else
$this->output->set_output("NOT OK");
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/ajax.php */
制作好此控制器后,如果需要,您總是可以創建更多的ajax調用,並且它們都在同一位置。
然后,您的jQuery ajax調用需要更改為以下內容:
...
$.ajax({
type: "POST",
url: "/index.php/ajax/user_availability",
data: "username="+ username,
---
我希望這可以為您提供解決方案的想法。
您可以向服務器上的頁面發出Ajax請求,以檢查用戶名是否可用,即使不使用JQuery,也可以使用純JavaScript和XMLHttpRequest對象,這是可能的,因為所有現代瀏覽器都支持Ajax。 您可以在某些事件上請求此頁面,例如,當用戶在文本框中輸入其姓名時,或者在完成名稱輸入后文本框失去焦點時,等等。
從服務器請求數據庫中名稱可用性的方法如下。 純粹使用JavaScript和Ajax。 (請注意,在示例方法中,我使用了JSP頁面和POST接口,而我使用了GET方法,因為要請求的數據不敏感,因此可以在不進行任何加密的情況下調用它)
function requestUserInfo(x)
{
var url = "./CheckAvailability.jsp?id=";
var xhr = false;
if(window.XMLHttpRequest) //Standard object that works with every browser except for IE
{
xhr = new XMLHttpRequest();
}
else if(window.ActiveXObject) //Use IE specific object if IE is the browser
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
function handleHttpResponse()
{
var results=xhr.responseText; //Store the response received from CheckAvailability.jsp
if(results.trim()=="0") //The CheckAvailability.jsp page will return 0 is user name exists
{
//Your code to perform something if user name exists
}
else
{
//Your code to perform something if user name does not exist
}
}
var sId = x.value;
xhr.open("GET", url + escape(sId), true);
xhr.onreadystatechange = handleHttpResponse;
xhr.send(null);
}
方法requestUserInfo(x)
接受將在其中調用此方法的控件的引用,並將請求以下頁面CheckAvailability.jsp
<%@ page import="java.sql.*" import="java.io.*" import="java.util.*" %>
//The following code checks for User name existence in a table stored in MySQL
<%
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection cn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/MyDatabase?user=;password=","myuser","mypass");
Statement st=cn.createStatement();
String user=request.getParameter("id");
ResultSet rs=st.executeQuery("select * from users where usernm='"+user+"'");
if(rs.next()) //Check if User Already Exists
{
//Return "0" if Exists
out.print("0");
}
else
{
//Return "1" if User name does not exist
out.print("1");
}
st.close();
cn.close();
}
catch(Exception e)
{
out.println(e);
}
%>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.