【发布时间】:2021-01-31 05:18:34
【问题描述】:
每当加载页面时,我都会尝试提交隐藏表单,为此我在控制器中创建了一个函数。我的问题是我不想离开当前视图,但我不能重定向到我想留在的视图,因为这会创建一个加载页面的恒定循环,在加载完成时调用我的函数然后再次重定向。因此,我想在不重定向到前一个视图但也不渲染新视图的情况下调用此函数,为此我使用了以下内容:
$this->autoRender = false;
$this->layout = false;
$this->render(false);
尽管如此,这些行似乎对我不起作用,因为操作不断被重定向到此函数,试图呈现一个不存在的视图而不是停留在前一个视图中。因此,我想知道是否有另一种选择可以在我的控制器中调用一个函数但停留在我所在的页面上(由于循环方面而不是通过重定向)。如果有帮助,我将添加我为此操作所拥有的代码:
这是我想要保持呈现的视图的一部分,其中我有与隐藏表单相关的功能
<?= $this->Form->create('Save data', array('url'=>'/exportations/save_data/'.$id, 'enctype' => 'multipart/form-data', 'method' => 'post', 'id' => 'data'))?>
<input type="hidden" id="svgGraph" />
<div class="" id="cont" style="display:none;"></div>
<?=$this->Form->end()?>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
var chart = Highcharts.chart( // code to create graph
);
var svg = chart.getSVG();
$("#svg1").val(svg1);
});
$(document).ready(function () {
document.getElementById('data').submit();
});
</script>
这是我当前的控制器'/exportations/save_data/'函数:
public function save_data(){
$this->autoRender = false;
$this->layout = false;
$this->render(false);
if($this->request->is('post')) {
$data = $this->request->data;
$exportation = $this->Exportation->save($data);
}
return;
}
目前,使用此代码,数据已成功存储,但用户最终得到一个空视图,因为控制器尝试呈现 save_data 视图。
【问题讨论】:
-
用户应该看到什么而不是空白页?
-
用户应该看到调用隐藏表单的视图,该视图由一个带有一些加载文本的页面和另一个可以编辑文本的表单组成。起初,我也调用此视图的方法来保存图形,但是当保存这些文本时,页面被重定向到同一页面但重新加载文本,这将导致我之前提到的无限循环。我希望我已经设法解释了自己。
-
当您的表单被发布时,浏览器将从显示表单的页面转到处理表单的页面。默认情况下,这就是表单的工作方式。如果您想保留原始页面,则需要通过 Ajax 发布表单。
标签: javascript jquery cakephp view cakephp-2.0