Permintaan tak segerak ke pelayan PHP tanpa mengembalikan data? (Lampiran penyelesaiannya)

藏色散人
Lepaskan: 2023-04-10 21:34:02
ke hadapan
4848 orang telah melayarinya

baru -baru ini menemui masalah dengan ajax permintaan asynchronous. $.post$.get$.ajax
Selepas banyak ujian, kami mendapati:

– penyemak imbas berbeza, meminta nama domain berbeza - tiada sekatan: tiada percubaan diperlukan – penyemak imbas berbeza, meminta yang sama nama domain - Tidak menyekat: mengembalikan berbeza
– penyemak imbas yang sama, meminta nama domain yang berbeza - Tidak menyekat:
mengembalikan berbeza session_id() – penyemak imbas yang sama, meminta nama domain yang sama - Menyekat:
mengembalikan yang sama session_id
session_id()Mendapati masalah:

1 Tutup2
KunciXDEBUG3 Kosongkan penimbal output
SESSION
1 Tutup

XDEBUG ialah penyahpepijatan masa nyata. Apabila menyahpepijat, ia akan kekal untuk memastikan urutan berfungsi untuk mengelakkan pencemaran data.
Kaedah ujian biasa ialah membuka penyemak imbas lain dan melawati tapak apabila menggunakan XDEBUG untuk menyahpepijat Tapak ini tidak boleh diakses pada masa ini. FPM
Ini mempunyai kesan ketara pada respons selari, iaitu walaupun bahagian hadapan menghantar berbilang permintaan, ia dikawal oleh XDEBUG dan hanya boleh membalas satu demi satu.

Selain itu, kerana

bergantung pada XDEBUG, anda perlu mematikan penguncian sesi walaupun anda menggunakan
(lihat di bawah). XDEBUGmasih akan dibuka secara automatik. SESSIONsession_write_close()XDEBUG2

Kunci

Gunakan SESSION untuk menutup kunci tulis , yang sesuai untuk kes di mana
disimpan sebagai session_write_close() . Tidak diperlukan jika SESSION disimpan dalam SESSION. FileSESSIONRedis3 Kosongkan penimbal output

Menggunakan mungkin tidak menutup kunci serta-merta, jadi tambah:
sebelum kaedah ini. Biarkan session_write_close() berkuat kuasa serta-merta. SESSIONob_end_flush()session_write_close()4 Contoh

Terdapat contoh berikut Apabila butang [Serah] diklik, bahagian hadapan akan menghantar dua permintaan ke pelayan bahagian belakang. Salah satunya adalah permintaan, yang diminta setiap 1 saat.
Salah satunya ialah permintaan
, yang dihantar sekali pada permulaan dan kemudian menunggu penyelesaian yang sepadan. get
Lihat kod HTMLpost

kod php

<form>
<input type="submit" value="提交" />
</form>

<script src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>

<script type="text/javascript">
    $(&#39;form&#39;).on(&#39;submit&#39;, function(e) {
        e.preventDefault();

        // 每隔一秒请求一次服务器
        var id = setInterval(function() {
            $.get(
                &#39;save.php?action=get&#39;,
                {},
                function(data) {
                    console.log(data);
                },
                &#39;json&#39;
            );
        }, 1000);

        $.post(
            &#39;save.php?action=post&#39;,
            {},
            function(data) {
                console.log(data);
                // 停止定时循环
                clearInterval(id);
            },
            &#39;json&#39;
        );
    });
</script>
Salin selepas log masuk

Pembelajaran yang disyorkan: "
<?php
session_start();$action = $_GET[&#39;action&#39;];
if ($action == &#39;post&#39;) {

   $_SESSION[&#39;time&#39;] = 0;
   session_write_close();

    while ($_SESSION[&#39;time&#39;] < 5) {
      session_start();
      $_SESSION[&#39;time&#39;] = $_SESSION[&#39;time&#39;] + 1;

      // 将SESSION数据写入文件中,并关闭写锁
      session_write_close();

      // sleep()模拟花费时间较长的程序,这样在关闭写锁之后,
      // 服务器就能够相应别的请求,如下的$action=get,
      sleep(1);
    }

    echo json_encode([session_id() => $_SESSION[&#39;time&#39;]]);
    exit();}if ($action == &#39;get&#39;) {
    echo json_encode([session_id() => $_SESSION[&#39;time&#39;]]);
    exit();}
Salin selepas log masuk
Tutorial video PHP

"

Atas ialah kandungan terperinci Permintaan tak segerak ke pelayan PHP tanpa mengembalikan data? (Lampiran penyelesaiannya). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan