Panggil fungsi pengontrol cakephp 2 tanpa tampilan rendering (autoRender false tidak berfungsi)

Saya mencoba mengirimkan formulir tersembunyi setiap kali halaman dimuat, yang fungsinya telah saya buat di pengontrol saya. Masalah saya adalah saya tidak ingin meninggalkan tampilan saat ini, tetapi saya juga tidak dapat mengalihkan ke tampilan yang saya inginkan karena itu akan membuat putaran konstan saat memuat halaman, memanggil fungsi saya ketika pemuatan telah selesai dan kemudian mengarahkan ulang lagi. Oleh karena itu, saya ingin memanggil fungsi ini tanpa mengalihkan ke tampilan sebelumnya tetapi juga tanpa merender tampilan baru, yang mana saya menggunakan yang berikut ini:

        $this->autoRender = false;
        $this->layout = false;
        $this->render(false);

Namun demikian, baris-baris ini sepertinya tidak berfungsi untuk saya, karena tindakan terus dialihkan ke fungsi ini mencoba membuat tampilan yang tidak ada alih-alih tetap berada di tampilan sebelumnya. Karena itu, saya ingin tahu apakah ada alternatif lain untuk dapat memanggil satu fungsi di pengontrol saya tetapi tetap berada di halaman tempat saya berada (bukan dengan mengalihkan karena aspek perulangan). Jika ini membantu, saya menambahkan kode yang saya miliki untuk tindakan ini:

Ini adalah bagian dari tampilan yang saya ingin tetap dirender di mana saya memiliki fungsi yang terkait dengan formulir tersembunyi

                    <?= $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>

Ini adalah fungsi pengontrol '/exportations/save_data/' saya saat ini:

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;

}

Saat ini, dengan kode ini, data berhasil disimpan, tetapi pengguna berakhir dengan tampilan kosong, saat pengontrol mencoba merender tampilan save_data.


person pepito    schedule 16.10.2020    source sumber
comment
Apa yang seharusnya dilihat pengguna selain halaman kosong?   -  person Greg Schmidt    schedule 17.10.2020
comment
Pengguna akan melihat tampilan dari mana formulir tersembunyi dipanggil, yang terdiri dari halaman dengan beberapa teks yang dimuat dan formulir lain yang dapat digunakan untuk mengedit teks. Pada awalnya, saya memanggil metode tampilan ini untuk menyimpan grafik juga, tetapi ketika menyimpan teks-teks tersebut, halaman tersebut dialihkan ke halaman yang sama tetapi memuat ulang teks, itu akan menyebabkan loop tak terbatas yang saya sebutkan sebelumnya. Saya harap saya berhasil menjelaskannya sendiri.   -  person pepito    schedule 18.10.2020
comment
Saat formulir Anda diposting, browser akan beralih dari halaman yang menampilkan formulir ke halaman hasil pemrosesan formulir. Begitulah cara kerja formulir, secara default. Jika Anda ingin menyimpan halaman asli di sana, Anda perlu mengirimkan formulir Anda melalui Ajax.   -  person Greg Schmidt    schedule 18.10.2020


Jawaban (1)


Jika hanya ada 1 (atau beberapa) tindakan yang memuat formulir ini, Anda dapat menanganinya dalam tindakan tersebut.

Dalam tindakan pengontrol yang merender formulir pada awalnya, periksa postingan dan data, lakukan apa yang perlu Anda lakukan, lalu selesaikan tindakan selanjutnya dan selesaikan rendering tampilan. Anda tidak perlu mengarahkan ulang pada postingan.

Dengan cara ini, jika penyimpanan berhasil, Anda dapat menyetel parameter data permintaan, yang dapat tercermin dalam tampilan, dan jika disetel, JS tidak mengaktifkan kembali formulir.

Ide AJAX dari @Greg Schmidt dalam hal UX adalah solusi yang lebih baik, saya akan memilihnya daripada saran saya kapan saja. Saya hanya mengusulkan ini jika Anda tidak ingin menggunakan AJAX

person SidMalde    schedule 04.02.2021