Cara menghantar pembolehubah dan data PHP ke JavaScript
P粉004287665
P粉004287665 2023-08-21 12:31:08
0
2
472
<p>Saya mempunyai pembolehubah dalam PHP dan saya perlu menggunakan nilainya dalam kod JavaScript saya. Bagaimanakah saya boleh menghantar pembolehubah saya dari PHP ke dalam JavaScript? </p> <p>Saya mempunyai kod berikut: </p> <pre class="brush:php;toolbar:false;"><?php $val = $myService->getValue(); // Buat panggilan API dan pangkalan data </pra> <p>Pada halaman yang sama, saya mempunyai kod JavaScript yang perlu menghantar nilai pembolehubah <kod>$val</code> <pre class="brush:js;toolbar:false;"><script> myPlugin.start($val); // Saya mencuba ini tetapi ia tidak berjaya <?php myPlugin.start($val); myPlugin.start(<?=$val?>); // Ini kadangkala berfungsi, tetapi kadangkala gagal </skrip> </pra> <p><br /></p>
P粉004287665
P粉004287665

membalas semua(2)
P粉893457026

Saya biasanya menggunakan atribut data-* dalam HTML.

<div
    class="service-container"
    data-service="<?= htmlspecialchars($myService->getValue()) ?>"
>

</div>

<script>
    $(document).ready(function() {
        $('.service-container').each(function() {
            var container = $(this);
            var service = container.data('service');

            // Var "service" now contains the value of $myService->getValue();
        });
    });
</script>

Contoh ini menggunakan jQuery, tetapi ia boleh disesuaikan dengan perpustakaan lain atau JavaScript asli.

Anda boleh membaca lebih lanjut tentang sifat set data di sini: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset

P粉517090748

Sebenarnya terdapat beberapa cara untuk melakukan ini. Sesetengah kaedah memerlukan lebih banyak overhed, dan sesetengahnya dianggap lebih baik daripada yang lain.

Tanpa susunan tertentu:

  1. Gunakan AJAX untuk mendapatkan data yang diperlukan daripada pelayan.
  2. Gema data ke lokasi pada halaman dan gunakan JavaScript untuk mendapatkan maklumat daripada DOM.
  3. Echo data terus ke dalam JavaScript.

Dalam artikel ini, kami akan memperincikan kebaikan dan keburukan setiap kaedah di atas, dan cara melaksanakannya.

1 Gunakan AJAX untuk mendapatkan data yang diperlukan daripada pelayan

Pendekatan ini dianggap terbaik kerana skrip bahagian pelayan dan bahagian klien dipisahkan sepenuhnya.

Kelebihan

  • Pemisahan yang lebih baik antara lapisan - Jika esok anda berhenti menggunakan PHP dan ingin beralih ke servlet, REST API atau perkhidmatan lain, anda tidak perlu menukar banyak kod JavaScript.
  • Lebih mudah dibaca - JavaScript ialah JavaScript, PHP ialah PHP. Dengan tidak mencampurkan kedua-duanya, anda mendapat lebih banyak kod yang boleh dibaca.
  • Membenarkan pemindahan data tak segerak - Mengambil maklumat daripada PHP boleh memakan masa/sumber. Kadang-kadang anda tidak mahu menunggu maklumat, memuatkan halaman, dan kemudian mendapatkannya apabila ia tiba.
  • Data tidak muncul terus dalam markup - Ini bermakna markup anda kekal bersih tanpa sebarang data tambahan, hanya boleh dilihat oleh JavaScript.

Keburukan

  • Delay - AJAX mencipta permintaan HTTP, dan permintaan HTTP bergerak melalui rangkaian dan mengalami kelewatan rangkaian.
  • STATUS - Data yang diperoleh melalui permintaan HTTP yang berasingan tidak akan mengandungi sebarang maklumat yang diperoleh daripada permintaan HTTP untuk mendapatkan dokumen HTML. Anda mungkin memerlukan maklumat ini (contohnya, jika dokumen HTML dijana sebagai tindak balas kepada penyerahan borang), dan jika anda memerlukannya, anda perlu menghantarnya entah bagaimana. Jika anda telah mengecualikan membenamkan data ke dalam halaman (yang anda telah kecualikan jika anda menggunakan teknik ini), maka anda hanya boleh menggunakan kuki/sesi, yang mungkin tertakluk pada syarat perlumbaan.

Contoh perlaksanaan

Dengan AJAX, anda memerlukan dua halaman, satu di mana PHP menjana output, dan satu lagi di mana JavaScript mendapat output itu:

dapatkan-data.php

/* 在这里执行一些操作,比如与数据库、文件会话等进行交互
 * 超越世界,无间地带,闪烁之城和加拿大。
 *
 * AJAX通常使用字符串,但你也可以输出JSON、HTML和XML。
 * 这完全取决于你发送的AJAX请求的Content-type头。 */

echo json_encode(42); // 最后,你需要`echo`结果。
                      // 所有数据都应该使用`json_encode`。

                      // 你可以在PHP中`json_encode`任何值,数组、字符串,
                      // 甚至对象。

index.php (atau nama halaman sebenar)

<!-- 省略 -->
<script>
    fetch("get-data.php")
        .then((response) => {
            if(!response.ok){ // 在解析(即解码)JSON数据之前,
                              // 检查是否有任何错误。
                // 如果有错误,抛出错误。
                throw new Error("Something went wrong!");
            }

            return response.json(); // 解析JSON数据。
        })
        .then((data) => {
             // 在这里处理响应。
             alert(data); // 将弹出:42
        })
        .catch((error) => {
             // 在这里处理错误。
        });
</script>
<!-- 省略 -->

Gabungan dua fail di atas akan muncul apabila pemuatan fail selesai42.

Banyak bacaan

2 Gema data ke lokasi tertentu pada halaman dan gunakan JavaScript untuk mendapatkan maklumat daripada DOM

Pendekatan ini kurang diingini berbanding AJAX, tetapi ia masih mempunyai kelebihannya. Dari satu segi, ia masih relatif dipisahkan antara PHP dan JavaScript, kerana PHP tidak digunakan secara langsung dalam JavaScript.

Kelebihan

  • Cepat - Operasi DOM secara amnya pantas dan anda boleh menyimpan serta mengakses sejumlah besar data dengan cepat.

Keburukan

  • Penanda yang berpotensi bukan semantik - Biasanya, anda menggunakan beberapa jenis atribut <input type=hidden>来存储信息,因为从inputNode.value中获取信息更容易,但这样做意味着你的HTML中有一个无意义的元素。HTML有<meta>元素用于文档的数据,HTML 5引入了data-* untuk data berkaitan JavaScript pada elemen tertentu.
  • Kucar-kacirkan kod sumber - Data yang dijana PHP dikeluarkan terus ke dalam kod sumber HTML, yang bermaksud anda mendapat kod sumber HTML yang lebih besar dan kurang fokus.
  • Lebih sukar untuk mendapatkan data berstruktur - Data berstruktur mestilah HTML yang sah, jika tidak, anda perlu melarikan diri dan menukar rentetan itu sendiri.
  • Gandingkan PHP dengan logik data - Oleh kerana PHP digunakan untuk pembentangan, tiada cara untuk memisahkan kedua-duanya dengan bersih.

Contoh perlaksanaan

Dalam kes ini, anda perlu mencipta beberapa jenis elemen yang tidak kelihatan kepada pengguna tetapi boleh dilihat oleh JavaScript.

index.php

<!-- 省略 -->
<div id="dom-target" style="display: none;">
    <?php
        $output = "42"; // 再次,执行一些操作,获取输出。
        echo htmlspecialchars($output); /* 必须转义,否则结果
                                           将不是有效的HTML。 */
    ?>
</div>
<script>
    var div = document.getElementById("dom-target");
    var myData = div.textContent;
</script>
<!-- 省略 -->

3. Gema data terus ke dalam JavaScript

Ini mungkin kaedah paling mudah untuk difahami.

Kelebihan

  • Sangat mudah untuk dilaksanakan - Kos untuk mencapai ini adalah sangat rendah dan mudah difahami.
  • Tidak mencemarkan kod sumber - pembolehubah dikeluarkan terus ke dalam JavaScript, jadi
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan