CakePHP AJAX调用

时间:2013-09-28 19:49:29

标签: ajax jquery cakephp

我正在使用CakePHP这是我在这个框架上的第一个项目。我将把输入的值发送到UsersController的{​​{1}}操作。并使用check_username()返回的字符串填充标识为na的元素。到目前为止,我所做的是:

check_username()

但这不起作用。有谁知道为什么或如何修改它以便它起作用?

3 个答案:

答案 0 :(得分:5)

您的check_username控制器操作可能会出现问题。 CakePHP-way是使用JsonView类发送任何数据抛出XHR(参见http://book.cakephp.org/2.0/en/views/json-and-xml-views.html)。它允许您使用.json扩展名调用任何操作(例如:/oes/users/check_username.json)并以序列化JSON格式获取响应,而无需在数组数据和JSON之间进行手动转换。

这种方法建议满足您的需求,但当然没有义务。

现在我认为CakePHP尝试渲染check_username视图,但由于您没有指定或创建它,因此无法执行此操作。尝试将您的操作代码更改为以下内容:

public function check_username(){
     $this->autoRender = false;
     echo 'Test string';
}

此外,尽量不要在将来使用此类代码构造。

答案 1 :(得分:2)

CakePHP有一个JS Helper来帮助编写aJax函数。唯一的问题是在你的头脑中包含jquery我们的蛋糕会抛出jQuery错误。

您的表格:

<?php 
  echo $this->Form->create('User', array('default'=>false, 'id'=>'YourForm'));
  echo $this->Form->input('username');
  echo $this->Form->submit('Check Username');
  echo $this->Form->end();
?>

Ajax功能:

<?php
  $data = $this->Js->get('#YourForm')->serializeForm(array('isForm' => true, 'inline' => true));
  $this->Js->get('#YourForm')->event(
    'submit',
    $this->Js->request(
      array('action' => 'checkUsername', 'controller' => 'user'),
      array(
        'update' => '#na',
        'data' => $data,
        'async' => true,    
        'dataExpression'=>true,
        'method' => 'POST'
      )
    )
  );
  echo $this->Js->writeBuffer();                                                 
?>

用户控制器中的功能

function checkUsername(){
  $this->autoRender = false;
  //run your query here 

  if ( $username == true ) 
    echo 'Username is taken';
  else
    echo 'Username is not taken';  
}

答案 2 :(得分:1)

谷歌有很多例子。 Here是一个很好的访问。