Rumah > Artikel > pembangunan bahagian belakang > Permintaan tak segerak ke pelayan PHP tanpa mengembalikan data? (Lampiran penyelesaiannya)
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
KunciXDEBUG
3 Kosongkan penimbal outputSESSION
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.
bergantung pada XDEBUG
, anda perlu mematikan penguncian sesi walaupun anda menggunakan
(lihat di bawah). XDEBUG
masih akan dibuka secara automatik. SESSION
session_write_close()
XDEBUG
2
Gunakan SESSION
untuk menutup kunci tulis , yang sesuai untuk kes di mana
disimpan sebagai session_write_close()
. Tidak diperlukan jika SESSION
disimpan dalam SESSION
. File
SESSION
Redis
3 Kosongkan penimbal output
Menggunakan mungkin tidak menutup kunci serta-merta, jadi tambah:
sebelum kaedah ini. Biarkan session_write_close()
berkuat kuasa serta-merta. SESSION
ob_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"> $('form').on('submit', function(e) { e.preventDefault(); // 每隔一秒请求一次服务器 var id = setInterval(function() { $.get( 'save.php?action=get', {}, function(data) { console.log(data); }, 'json' ); }, 1000); $.post( 'save.php?action=post', {}, function(data) { console.log(data); // 停止定时循环 clearInterval(id); }, 'json' ); }); </script>Pembelajaran yang disyorkan: "
cf44e1b56b3cc8a68161c85bcd1685b9 $_SESSION['time']]); exit();}if ($action == 'get') { echo json_encode([session_id() => $_SESSION['time']]); exit();}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!