Cakephp:通过Ajax保存表单

时间:2010-10-14 07:55:25

标签: javascript ajax cakephp

我有一个用户模块,用户可以从个人资料页面设置状态消息(推文)。

alt text

当某人单击“共享”时,应该转到某个操作并保存状态消息。我不确定如何在CakePHP中执行此操作。

我会使用jQuery。如果你能指出我正确的文件。这将是非常有帮助的

我是Ajax的新手。

2 个答案:

答案 0 :(得分:2)

CakePHP有一个Js Helper默认使用JQuery库。 您正在寻找的方法是submit()方法。

示例用法是:

    <?php echo $form->create('Tweet'); ?>
    <!-- form elements -->
    <?php echo $this->Js->submit('Share',
                                array(
                                    'update' => '#content'
                                )
                            ); ?>

元素#content的内容将使用从控制器返回的HTML进行更改。

在上面示例中提交ajax表单的操作add()中,您可能希望在检测到ajax请求时将布局更改为ajax。您可以使用isAjax()方法和控制器的$layout属性来执行此操作。

答案 1 :(得分:1)

表单是通过ajax以与没有CakePHP的方式完全相同的方式提交的。如果是我,这就是我要做的......

在我看来:

<?php echo $this->Html->script( 
  array( 'vendors/jquery.min', 'customjs' )
  , array( 'inline' => false, 'once' => true ) 
) ?>

<?php echo $this->Form->create( ... ) ?>
  ... your form content here ...
<?php echo $this->Form->end( 'Share' ) ?>

在自定义Javascript文件(/js/custom.js)中:

$(function() {
  $('#your-form' ).submit( function() {
    // make your ajax call
    $.post( ... );

    return false; // prevent a new request
  });
});

最后,创建一个新的控制器和/或操作来处理ajax调用所请求的URL。当然,这只是重点,但它们说明了关注点的关键分布:

  1. 包含必要的JS文件,以便您的视图可以访问它们。
  2. 在document.ready(非内联)
  3. 上附加提交事件处理程序
  4. 通过从事件处理程序返回false,阻止表单在 ajax调用后执行其定期提交的
  5. 希望有所帮助。