2013-02-08 133 views
14

请帮助我,如果任何人都可以给我一个例子,如何使用Ajax使用CakePHP 2.3.0的例子是这样的简单的Ajax例子2.3.0

<?php echo $this->html->link('Original', '#', 
       array('onclick'=>'return false;', 'id'=>'remanufactured-link', 'class'=>'get-type-product-link')); ?> 

<div id="content"> 
</div> 

当我点击一个链接original一与编号content的div是变化。我怎么能用cakephp 2.3.0来做到这一点?

回答

12

见下面的例子:

  $.ajax({ 
      dataType: "html", 
      type: "POST", 
      evalScripts: true, 
      url: '<?php echo Router::url(array('controller'=>'your-controller','action'=>'your-action'));?>', 
      data: ({type:'original'}), 
      success: function (data, textStatus){ 
       $("#div1").html(data); 

      } 
     }); 
+2

thx来回答,这是行不通的,但是如果我回显这个'<?php echo Router :: url(array('controller'=>'products', 'action'=>'get_type_product'));?>''一个输出就像这样'/ jc/products/get_type_product',所以我把这个输出放到了像这样的'url:'/ jc/products/get_type_product' ',这是工作..可能'url:'<?php回声路由器:: url(数组('控制器'=>'产品','行动'=>'get_type_product'));?>','有一个问题.. – casper

0

您可以使用jQuery/AJAX

$("#remanufactured-link").click(function(){ whatyouneed.appenTo("#content"); }) 

whatyouneed做可以为后/获取或别的数据响应。

+0

thx答复,对不起,我想一步一步如何使用CakePHP 2.3.0 ajax。上面的例子只是一个例子,当我点击一个'原始'链接时,如何更新div'内容' – casper

+0

你想做什么?你想在该div中更改哪些数据? – Crsr

+0

让我给你一个没有使用cakephp框架的例子,只是php和jquery/ajax Original jquery/ajax代码$(document).ready(function(){012#} ['remanufactured-link')。click(function ){\t \t $ .ajax({\t \t url:'getType。PHP”, \t \t类型: 'POST', \t \t数据: “类型=原始”, \t \t成功:功能(响应){ \t \t \t $( '#内容')的HTML(响应)。 \t \t} \t}); \t}); }); ? getType.php代码 我的问题是如何做到这一步一步使用cakephp但cakephp新版本它是cakephp 2.3.0? 谢谢 – casper

56

有太大的区别并不是使用CakePHP使用Ajax比普通的HTML/PHP和Ajax。

这里有一个AJAX调用和响应的蛋糕APP的例子:

的jQuery:

$.ajax({ 
    url: '/types/fetch/original', 
    cache: false, 
    type: 'GET', 
    dataType: 'HTML', 
    success: function (data) { 
     $('#context').html(data); 
    } 
}); 

(不要忘了更改URL参数,以符合你的配置)。

这将向您的类型控制器发出ajax请求,并使用参数'original'调用fetch()方法。

你TypesController会是这个样子:

class TypesController extends AppController { 

    public $components = array(
     'RequestHandler' 
    ); 

    public function fetch($type) { 

     $data = $this->Type->find('all', array(
      'conditions'=>array(
       'Type.type'=>$type 
      ) 
     ); 

     $this->set('data', $data); 

    } 
} 

添加RequestHandler组件意味着渲染你的Ajax请求时蛋糕将自动使用最小的Ajax布局。通常这是在AppController中添加的,所以所有的控制器都可以使用它。

与相关视图:

/app/View/Types/fetch.ctp

<ul> 
    <?php foreach($data as $item): ?> 
    <li><?php echo $item['Type']['name']; ?></li> 
    <?php endforeach; ?> 
</ul> 
+5

这个答案更详细,并解释了MVC模型中所有需要做这件事的部分..不知道为什么它没有投票有效。 – dcasadevall

+0

我按照相同的程序,但得到404错误,网址没有找到..请帮助.. –

+0

@GirishGowda取决于您的应用程序运行的位置(我的示例假定为webroot)。您可能需要Ajax .url参数的完全限定URL。 – RichardAtHome

1

我只是使用CakePHP和阿贾克斯开始了自己,但是从我目前为止收集,这似乎更容易做法。 您认为使用:

echo $this->Js->link(
    'Original', 
    '#', 
    array('async' => true, 
      'update' => 'content', 
        'id' => 'remanufactured-link' 
     ) 
); 
<div id="content"> 
</div> 

这意味着你在呼唤从该视图控制器的几件事情(例如索引操作将通过单击链接等等调用)。