Это мой jquery или php? - PullRequest
       5

Это мой jquery или php?

0 голосов
/ 28 ноября 2010

Редактировать: по какой-то причине кажется, что обновляется страница после нажатия кнопки "Отправить" ... есть идеи?

работа над этим простым сценарием в чате с использованием ajax и php framework kohana.Я не могу заставить мой скрипт работать для создания нового пользователя, и у меня ужасные навыки отладки в php и javascript.Во всяком случае, я не знаю, есть ли что-нибудь еще сказать ... вот мой код:

здесь код для пользовательского класса:

class Model_User extends Kohana_Model
{
 var $_loaded = false;
 var $session = false;
 var $username = false;
 var $loginkey = false;

 function __construct()
 {
  $this->session = Session::instance();
 }

 function new_user($username)
 {
  if($this->username_exists($username))
    return false;
  $this->username = $username;
  $this->generate_key();
  return $this->update_db();
 }

 function username_exists($username)
 {
  if(DB::select()->from('users')->where('username', '=', $username)->execute()->count()<1);
   return false;
  return true;
 }

 //helper methods

 private function generate_key()
 {
  if( ! $username)
   return false;
  $this->loginkey = md5($username.((int)mt_srand()*1000));
  $this->session->set('loginkey',$this->loginkey);
  return true;
 }

 private function update_db()
 {
  if(DB::insert('users', array('username'=>$this->username, 'loginkey'=>$this->loginkey))->execute())
   return true;
  return false;
 }
    }

и вот код для обработки запроса json:

public function action_new_user(){
  $user = new Model_User();
  $json['username_exists'] = "true";
  $username = $_POST['username'];
  if(isset($username))
  {
   if($user->username_exists($username))
   {
    echo json_encode($json);
    return;
   }
   $user->new_user($_POST['username']);
   $json['username_exists'] = "false";
  }
  $this->request->response = json_encode($json);
 }

и вот jquery и html

<div id="chat_entry_errors">

</div>

<form id="new_chat_entry" name="posttest">
  <input type="text" name="username" />
  <input type="submit" name="submit" value="New User" />
    </form>

$(document).ready(function(){
 $('#new_chat_entry').submit(function(){
  $.post('json/new_user', $('#new_chat_entry').serialize(),
   function(data){
    if(data.username_exists=='true'){
     $('#chat_entry_errors').html('<div class=\"error\">Sorry that username is currently unavailable.  Please choose another.</div>');
    }
    else {
     $('#chat_entry_errors').html('<div class=\"error\">Success!</div>');
    }
   }
  );
 });
    });

1 Ответ

1 голос
/ 28 ноября 2010

Похоже, это отправка формы.Поскольку у вас нет параметра действия, он будет отправлен на ту же страницу, действуя как обновление.Попробуйте добавить return false; в конец функции отправки.

$(document).ready(function(){
 $('#new_chat_entry').submit(function(){
  $.post('json/new_user', $('#new_chat_entry').serialize(),
   function(data){
    if(data.username_exists=='true'){
     $('#chat_entry_errors').html('<div class=\"error\">Sorry that username is currently unavailable.  Please choose another.</div>');
    }
    else {
     $('#chat_entry_errors').html('<div class=\"error\">Success!</div>');
    }
   }
  );
return false;
 });
    });
...