Usando a função remota da validação de jquery
Estou tentando descobrir como posso transformar isso:
$('#username').blur(function(){
$.post('register/isUsernameAvailable',
{"username":$('#username').val()},
function(data){
if(data.username == "found"){
alert('username already in use');
}
}, 'json');
});
em algo próximo disso:
rules: {
username: {
minlength: 6,
maxlength: 12,
remote: {
url: 'register/isUsernameAvailable',
type: 'post',
data: {
'username': $('#username').val()
}
}
}
No entanto, estou tendo dificuldade em terminar. O que eu quero é que, em vez do alerta, ele exiba a mensagem de erro, mas posso definir a mensagem dentro das mensagens de validação da jquery.
http://docs.jquery.com/Plugins/Validation/Methods/remote#options
ATUALIZAR:
Por alguma razão, ele não está fazendo isso como um POST, fazendo isso como um pedido GET e não tem certeza do porquê. Aqui está o código atualizado:
rules: {
username: {
minlength: 6,
maxlength: 12,
remote: {
url: 'register/isUsernameAvailable',
dataType: 'post',
data: {
'username': $('#username').val()
},
success: function(data) {
if (data.username == 'found')
{
message: {
username: 'The username is already in use!'
}
}
}
}
},
ATUALIZAÇÃO 2:
Agora estou chegando em algum lugar que estou de volta para obter o pedido POST. Estou tendo mais dois problemas. Uma delas é o fato de que, para que outra solicitação POST seja feita, o usuário precisa atualizar o formulário. E o último problema é que, se o nome de usuário retornado for encontrado, ele NÃO mostrará a mensagem de erro.
rules: {
username: {
minlength: 6,
maxlength: 12,
remote: {
type: 'post',
url: 'register/isUsernameAvailable',
data: {
'username': $('#username').val()
},
dataType: 'json',
success: function(data) {
if (data.username == 'found')
{
message: {
username: 'The username is already in use!'
}
}
}
}
},
ATUALIZAR:
public function isUsernameAvailable()
{
if ($this->usersmodel->isUsernameAvailable($this->input->post('username')))
{
return false;
}
else
{
return true;
}
}
ATUALIZAÇÃO 4:
Controlador:
public function isUsernameAvailable()
{
if ($this->usersmodel->isUsernameAvailable($this->input->post('username')))
{
return false;
}
else
{
return true;
}
}
public function isEmailAvailable()
{
if ($this->usersmodel->isEmailAvailable($this->input->post('emailAddress')))
{
return false;
}
else
{
return true;
}
}
MODELO:
/**
* Check if username available for registering
*
* @param string
* @return bool
*/
function isUsernameAvailable($username)
{
$this->db->select('username');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->usersTable);
if ($query->num_rows() == 0)
{
return true;
}
else
{
return false;
}
}
/**
* Check if email available for registering
*
* @param string
* @return bool
*/
function isEmailAvailable($email)
{
$this->db->select('email');
$this->db->where('LOWER(email)=', strtolower($email));
$query = $this->db->get($this->usersTable);
if($query->num_rows() == 0)
{
return true;
}
else
{
return false;
}
}