1

我正在使用 CakePHP 2.3 和 jQuery Mobile 构建一个移动应用程序。

我很难让登录工作。我发送包含调查的链接,如果用户没有在他们的移动浏览器上登录,它首先让他们登录。

问题是第一次,它只是刷新到一个空白页面。如果您关闭页面并重新打开链接,它可以工作,但这很糟糕。我希望它能够正确重定向。

这是登录视图:

<div class="users form">
    <?= $this->Session->flash('auth'); ?>
    <?= $this->Form->create('User'); ?>
    <fieldset>
    <?
        echo $this->Form->input('username');
        echo $this->Form->input('password');
    ?>
    </fieldset>
    <?
    $options = array(
        'label' => 'Login',
        'rel' => 'external',
        'data-ajax' => false
    );
    ?>
    <?= $this->Form->end($options); ?>
</div>

如您所见,我尝试了rel=externaland data-ajax=false

以某种方式将登录名放在同一页面上可能会解决问题,但这似乎违背了首先使用 CakePHP 的目的。

有任何想法吗?我难住了。

4

1 回答 1

3

这不会在 Cake 中创建 AJAX 表单。

您必须禁用表单的默认操作,然后通过 Javascript 提交数据。您可以使用 Cake 中内置的 JsHelper 来执行此操作。

要禁用表单的自动提交,您需要将其传递给create方法。

Form->create('User',array('default'=>false)); ?>

然后就可以使用serializeFormJsHelper 的方法了。

<?php
$data = $this->Js->get('#UserForm')->serializeForm(array('isForm' => true, 'inline' => true));
$this->Js->get('#UserForm')->event(
      'submit',
      $this->Js->request(
        array('action' => 'save'),
        array(
                'update' => '#UserForm',
                'data' => $data,
                'async' => true,    
                'dataExpression'=>true,
                'method' => 'POST'
            )
        )
    );
?>

注意:以上要求您将 JsHelper 的输出放置在布局的正确位置。

您现在可以像这样渲染表单。

<div class="users form">
    <?= $this->Session->flash('auth'); ?>
    <?= $this->Form->create('User',array('default'=>false)); ?>
    <fieldset>
    <?
        echo $this->Form->input('username');
        echo $this->Form->input('password');
    ?>
    </fieldset>
    <?
    $options = array(
        'label' => 'Login',
    );
    ?>
    <?= $this->Form->end($options); ?>
</div>

这在我的脑海中。所以不是测试。

于 2013-05-20T14:23:46.830 回答