Permintaan AJAX Serentak Saling Sekat
Dalam situasi tertentu, permintaan AJAX mungkin tidak berjalan serentak, menyebabkan tingkah laku yang tidak dijangka. Isu ini dibangkitkan apabila pengguna menghadapi masalah dengan dua permintaan AJAX serentak yang direka bentuk untuk menunjukkan kemajuan semasa mengeksport data ke fail XSLX. Permintaan pertama mencetuskan skrip PHP yang panjang, dan permintaan kedua menyemak kemas kini kemajuan pada selang masa yang tetap.
Setelah disiasat, didapati bahawa permintaan AJAX kedua sedang menunggu untuk yang pertama selesai sebelum melaksanakan. Tingkah laku ini dikaitkan dengan penyekatan sesi dalam PHP.
Penyekatan Sesi dalam PHP
Secara lalai, PHP menggunakan fail untuk menyimpan data sesi. Apabila sesi dimulakan (menggunakan fungsi session_start()), PHP membuka fail sesi untuk menulis dan menguncinya untuk memastikan akses eksklusif. Mekanisme penguncian ini menghalang permintaan serentak daripada mengakses fail secara serentak. Akibatnya, permintaan AJAX kedua terpaksa menunggu yang pertama selesai dan membuka kunci fail sesi sebelum ia boleh dilaksanakan.
Penyelesaian
Penyelesaian untuk ini Isunya ialah untuk melumpuhkan storan sesi berasaskan fail lalai PHP atau menutup fail sesi secara eksplisit selepas menulis kepadanya, melepaskan kunci.
Untuk melumpuhkan storan sesi berasaskan fail, tambah baris berikut pada php.ini anda fail:
session.save_path =
Untuk menutup fail sesi secara eksplisit, gunakan fungsi session_write_close():
<code class="php"><?php session_start(); $_SESSION['foo'] = 'bar'; // Write data to the session session_write_close(); // Close the session file echo $_SESSION['foo']; // You can still read from the session. ?></code>
Dengan melaksanakan penyelesaian ini, anda boleh memastikan bahawa permintaan AJAX kedua akan dilaksanakan serentak dengan yang pertama, membolehkan anda menjejak kemajuan tanpa berlengah-lengah.
Atas ialah kandungan terperinci Mengapa Permintaan AJAX Saya Sekat Satu Sama Lain dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!