Доступность имени пользователя Ajax с помощью codeigniter - PullRequest
0 голосов
/ 22 марта 2011

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 для проверки ajax с помощью метода post. Я хочу знать лучший способ сделать это ..

я должен создать новую функцию в контроллере, чтобы проверить, доступно ли имя пользователя или нет? Скажите, пожалуйста, на какой URL-адрес jQuery должен отправить запрос.

<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">&nbsp;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>

Спасибо!

Ответы [ 2 ]

4 голосов
/ 22 марта 2011

Я обычно создаю контроллер с именем 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,
---

Надеюсь, это даст вам идею для решения.

0 голосов
/ 22 марта 2011

Вы можете сделать запрос Ajax на страницу на сервере, чтобы проверить, доступно ли имя пользователя, это возможно даже без использования JQuery, вместо этого используйте простой объект JavaScript и XMLHttpRequest, поскольку все современные браузеры поддерживают Ajax. Вы можете запросить эту страницу для определенного события, то есть, когда пользователь вводит свое имя в текстовом поле, или когда текстовое поле теряет фокус при вводе имени и т. Д.

Метод, который будет запрашивать доступность имени в базе данных с сервера, будет следующим. Чисто с помощью JavaScript и Ajax. (Обратите внимание, что в примере метода я использовал страницу JSP и intead 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);
}
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...