【问题标题】:Cakephp ajax form won't load the right viewCakephp ajax 表单不会加载正确的视图
【发布时间】:2014-07-07 14:28:22
【问题描述】:

我只是想从表单提交中调用一个函数(这也是从 ajax 调用的)。

我想调用 add 方法,但它总是调用的索引。

我的 ajax 视图与 ajax 提交表单:

<?php $count = count($files); ?>
<div id="message"></div>
<i><?= __('Nombre de fichiers liés : ') . $count ?></i>
<?= $this->Form->create('FilesManager', array('enctype' => 'multipart/form-data', 'url' => array('action' => 'add'))); ?>
<?= $this->Form->input('file', array('type' => 'file', 'label' => false, 'class' => 'form-control')); ?>
<?= $this->Js->submit('Envoyer', array('update' => '#message', 'div' => false, 'type' => 'json', 'async' => false)); ?>
<?= $this->Js->writeBuffer(); ?>

我也试过了:

<?= $this->Form->create(null, array('enctype' => 'multipart/form-data', 'url' => array('controller' => 'FilesManagers', 'action' => 'add'))); ?>

<?= $this->Form->create('FilesManager/add', array('enctype' => 'multipart/form-data')); ?>

编辑

$this->Form->create('FilesManager', array('action' => 'add'))

不适合我,但生成的表单看起来像:

<form action="/agralis/files_managers/add" enctype="multipart/form-data" id="FilesManagerIndexForm" method="post" accept-charset="utf-8">...<input id="submit-838644811" type="submit" value="Envoyer"><script type="text/javascript">
//<![CDATA[
$("#submit-838644811").bind("click", function (event) {$.ajax({async:false, data:$("#submit-838644811").closest("form").serialize(), dataType:"html", success:function (data, textStatus) {$("#message").html(data);}, type:"post", url:"\/agralis\/FilesManagers"});
return false;});
//]]>
</script></form>

我可以看到表单动作看起来不错(当我在浏览器 url 中复制/粘贴动作时,他找到了方法)但是从 ajax 提交按钮调用的 url 是错误的!我该如何改变呢?

【问题讨论】:

  • 如果添加操作与调用它的视图在同一个控制器中,请尝试$this-&gt;Form-&gt;create('FilesManager', array('action' =&gt; 'add'))
  • 问题更新,感谢您的帮助。

标签: cakephp ajaxform cakephp-2.4.7


【解决方案1】:

助手们独立工作

Js 助手不知道Form 助手,它们不相互交互,因此Js 助手不知道表单 URL。

那个问题的解决方法比较简单,看文档就行了:

http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html#JsHelper::submit

submit() 方法接受 url 选项,您可以在其中指定一个 URL,以防基于当前请求的默认 URL 不适合您。

$this->Js->submit('Envoyer', array(
    'url' => array('action' => 'add')
    // ...
));

不支持文件上传

您将遇到的下一个问题是文件上传不起作用。这不是问题的一部分,但我会提出这个主题。

Js 帮助程序不支持生成处理文件上传所需的 JavaScript,它需要利用 older browsers are lackingXMLHttpRequest Level 2 (xhr2) 功能。

您必须编写自定义 JavaScript 来处理它。相关的解释和教程可以在整个网络上找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多