0

编辑:由于某种原因,它似乎在点击提交按钮时刷新页面......有什么想法吗?

使用 ajax 和 kohana php 框架处理这个简单的聊天室脚本。不过,我似乎无法让我的脚本为创建新用户而工作,而且我在 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>');
    }
   }
  );
 });
    });
4

1 回答 1

1

看起来它正在提交表单。由于您没有操作参数,因此它将提交到同一页面,就像刷新一样。尝试添加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;
 });
    });
于 2010-11-28T20:31:11.473 回答