Javascript 在不呈现视图的情况下调用cakephp 2控制器函数(autoRender false不工作)

Javascript 在不呈现视图的情况下调用cakephp 2控制器函数(autoRender false不工作),javascript,jquery,cakephp,view,cakephp-2.0,Javascript,Jquery,Cakephp,View,Cakephp 2.0,每当加载页面时,我都会尝试提交一个隐藏表单,为此我在控制器中创建了一个函数。我的问题是我不想离开当前视图,但我也不能重定向到我想要保留的视图,因为这将创建一个加载页面的持续循环,加载完成后调用我的函数,然后再次重定向。因此,我希望调用此函数而不重定向到上一个视图,但也不渲染新视图,为此我使用了以下方法: $this->autoRender = false; $this->layout = false; $this->render(

每当加载页面时,我都会尝试提交一个隐藏表单,为此我在控制器中创建了一个函数。我的问题是我不想离开当前视图,但我也不能重定向到我想要保留的视图,因为这将创建一个加载页面的持续循环,加载完成后调用我的函数,然后再次重定向。因此,我希望调用此函数而不重定向到上一个视图,但也不渲染新视图,为此我使用了以下方法:

        $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>
当前,使用此代码,数据成功存储,但当控制器尝试呈现“保存”数据视图时,用户最终得到一个空视图。

如果只有一个(或几个)操作加载此表单,则可以在该操作中处理此问题

在最初呈现窗体的控制器操作中,检查post和数据,执行所需操作,然后完成其余操作并完成视图的呈现。你不必在发帖时重定向

通过这种方式,在保存成功时,您可以设置一个请求数据参数,该参数可以反映在视图中,如果设置了,JS不会“重新启动”表单


@gregschmidt在UX方面的AJAX想法是一个更好的解决方案,我会选择它而不是我的建议。如果您不想使用AJAX,我只建议这样做,用户应该看到什么而不是空白页面?用户应该看到调用隐藏表单的视图,该视图由一个包含一些加载文本的页面和另一个可以编辑文本的表单组成。起初,我调用此视图的方法来保存图形,但当保存这些文本时,页面被重定向到同一页面,但重新加载文本,这将导致前面提到的无限循环。我希望我已经解释过了。发布表单时,浏览器将从显示表单的页面转到处理表单的页面。默认情况下,表单就是这样工作的。如果希望保留原始页面,则需要通过Ajax发布表单。
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;

}