Redirect halaman tidak berfungsi secara konsisten dalam PHP atau JavaScript


Saya telah membaca pelbagai sumber di sini dan telah mencipta cara berikut untuk mengalihkan pengguna selepas 10 saat. Tidak digunakan pada masa yang sama.

Percubaan pertama dalam PHP:

header("refresh:10;url=?switch=1")

Kemudian, cubaan kedua dalam JavaScript:

window.setTimeout(function () {
    location.href = '?switch=1';
}, 10000);

Mereka berdua berfungsi hampir sepanjang masa. Mereka digunakan pada halaman yang menggunakan reveal.js (seperti yang ini). Kadang-kadang apabila pecahan URL berubah, halaman tidak lagi mengalihkan sama sekali - walaupun, lebih kerap daripada tidak, pengalihan memang berfungsi.

Bolehkah sesiapa memberitahu saya apakah masalahnya, atau sumber yang bagus untuk membaca tentang masalah ini?

Sunting: Menukar kepada setInterval dalam versi JavaScript menyebabkan ia mencuba semula.

Jawapan #1

Permainan kuiz/memori yang berpindah dari satu soalan ke soalan lain setiap sepuluh saat?

Daripada memuat semula aplikasi setiap x saat, bina sebuah aplikasi satu muka surat yang menarik data dari skrip PHP anda dan kemudian memaparkannya setiap x saat.

Contoh yang sangat cepat (tidak diuji):

<!doctype html>
<html>
<head>
    <title>Example</title>
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
</head>
<body>

Question #<span id="question_number"></span><br />
<p id="question"></p>

<script>
var questionCounter = 0;

function loadQuestion(questionNumber) {
        questionCounter++;

        $.get( "<your_php_script_url>?question="+questionCounter, function( data ) {
                $( "#question_number" ).html( questionCounter );
                $( "#question" ).html( data.question );

                setTimeout(function() {
                    loadQuestion(questionCounter);
                }, 10000);
        });
}
loadQuestion(questionCounter);

</script>

</body>
</html>

Jawapan #2

Apabila menetapkan header dengan PHP, anda mesti melakukannya sebelum sebarang output dihasilkan, adalah mungkin bahawa anda menghasilkan beberapa jenis output dalam keadaan tertentu sebelum header PHP ditetapkan.

"Adalah penting untuk diperhatikan bahawa pengepala (headers) sebenarnya dihantar apabila bait pertama dikeluarkan ke pelayar. Jika anda menggantikan pengepala dalam skrip anda, ini bermakna penempatan pernyataan echo/print dan penimbal output mungkin sebenarnya mempengaruhi pengepala mana yang dihantar." - dari http://php.net/manual/en/function.header.php Anda mungkin mendapati halaman itu berguna untuk dibaca (Jika anda belum menelusuriinya), saya mendapati ia berguna ketika menghadapi masalah berkaitan pengepala.

Saya akan menambah lebih banyak konteks (dan kod yang berkaitan) pada soalan anda jika anda mahu jawapan yang lebih mendalam. Kita tidak dapat mengetahui apa yang salah dengan kod yang kita tidak dapat lihat. Jika anda menyertakan kod yang menggunakan fragmen URL yang anda tetapkan, kami mungkin akan mempunyai pemahaman yang lebih baik tentang apa yang sebenarnya dilakukan oleh kod anda, dan mungkin dapat mengesan kesilapan yang anda terlepas. Berikut adalah wikki tentang fragmen, sekadar untuk lengkap. https://en.wikipedia.org/wiki/Fragment_identifier

Akhirnya, dengan contoh JavaScript ini saya tidak tahu apa yang perlu dilakukan. Ia berfungsi dengan baik di sistem saya. (walaupun muat semula mungkin tertangguh beberapa mikro saat). Anda boleh cuba menggunakan setInterval() sebaliknya?