亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Jadual Kandungan
Penyebab dan penyelesaian biasa untuk melompat halaman selepas permintaan tidak segerak
1. Mencegah tingkah laku navigasi halaman lalai
2. Segarkan semula halaman semasa selepas permintaan pengambilan berjaya.
PHP backend endpoint
Meringkaskan
Rumah pembangunan bahagian belakang tutorial php Tutorial mengenai pencegahan halaman melompat dan menyegarkan halaman semasa setelah menggunakan permintaan post asynchronous

Tutorial mengenai pencegahan halaman melompat dan menyegarkan halaman semasa setelah menggunakan permintaan post asynchronous

Oct 15, 2025 pm 04:12 PM

Tutorial mengenai mencegah halaman melompat dan menyegarkan halaman semasa setelah menggunakan permintaan post asynchronous

Apabila menggunakan API JavaScript's `Fetch` untuk membuat permintaan postynchronous, pemaju sering menghadapi masalah yang halaman itu tidak disangka -sangka melompat ke titik akhir API selepas permintaan selesai. Artikel ini akan terperinci bagaimana untuk mengelakkan tingkah laku navigasi halaman lalai dengan menetapkan jenis butang ke `butang` atau menggunakan` event.PreventDefault () `dalam acara penyerahan borang, dan gunakan kaedah lokasi.reload ()` untuk menyegarkan halaman semasa selepas permintaan `fetch`

Penyebab dan penyelesaian biasa untuk melompat halaman selepas permintaan tidak segerak

Apabila menggunakan API Fetch untuk menghantar data ke backend, terutamanya apabila mengemas kini data melalui permintaan pos, kami biasanya berharap bahawa selepas data dikemas kini, pengguna masih akan tetap berada di halaman semasa, dan kandungan halaman akan mencerminkan perubahan data terkini. Walau bagaimanapun, kekecewaan yang sama adalah bahawa penyemak imbas secara automatik boleh menavigasi ke URL sasaran permintaan pos (iaitu titik akhir API) selepas permintaan selesai. Ini biasanya tidak diingini tingkah laku kerana ia memecahkan pengalaman pengguna untuk aplikasi halaman tunggal atau kemas kini separa.

Sebab utama tingkah laku ini adalah:

  1. Tingkah laku lalai butang: elemen dalam html, jika ia terletak di dalam tag
    dan atribut jenis tidak dinyatakan secara jelas, jenis lalainya disiarkan. Mengklik butang jenis hantar akan menyebabkan borang diserahkan, yang seterusnya mencetuskan navigasi halaman ke URL yang ditentukan dalam atribut tindakan borang.
  2. Penyerahan borang yang tidak disekat: Walaupun butang tidak berada dalam bentuk, atau dibuat secara dinamik melalui JavaScript, ia boleh menyebabkan halaman melompat jika tingkah lakunya berakhir mensimulasikan penyerahan borang.

Untuk menyelesaikan masalah ini, kita perlu mengambil dua langkah teras: mencegah navigasi halaman dan menyegarkan halaman semasa selepas permintaan berjaya.

1. Mencegah tingkah laku navigasi halaman lalai

Bergantung pada kes penggunaan butang, terdapat dua cara utama untuk mengelakkan navigasi halaman:

Kaedah 1: Menentukan butang jenis butang secara eksplisit

Jika butang anda digunakan untuk mencetuskan fungsi JavaScript dan bukannya menyerahkan keseluruhan borang, maka kaedah yang paling mudah adalah untuk menetapkan atribut jenisnya kepada "butang". Ini dengan jelas akan memberitahu penyemak imbas bahawa butang itu tidak boleh mencetuskan tingkah laku penyerahan bentuk tradisional.

Contoh HTML:

 
<span onclick="addGuestName (this)">
    <butang kelas="addpaxname btn btn-xs btn-warning" type="button"> tambah </butang>
</span>

Dengan menambah Type = "Button", mengklik butang ini tidak lagi menyebabkan halaman melompat.

Kaedah 2: Mencegah tingkah laku lalai dalam acara penyerahan borang (Event.PreventDefault ())

Jika butang anda sebenarnya berada di dalam tag

, dan anda ingin mengendalikan logik penyerahan melalui JavaScript dan bukannya penyemak imbas melakukan penyerahan borang lalai, maka anda perlu menggunakan event.preventdefault () dalam pendengar acara hantar borang.

Contoh HTML (dengan asumsi butang berada dalam bentuk):

 
tambah

Contoh JavaScript:

 document.getElementById ('GuestForm'). AddEventListener ('Submit', Function (Event) {
    event.PreventDefault (); // Mencegah tingkah laku penyerahan lalai borang // panggil fungsi pengambilan asynchronous anda di sini // updateguestName (paxid, nama);
});

Dalam kod asal anda, butang mencetuskan fungsi updateguestName melalui addEventListener ('klik', ...), dan butang dibuat secara dinamik. Jika butang tidak dinyatakan dengan jelas dengan jenis = "butang" dan elemen ibu bapa atau nenek moyangnya adalah

, ia masih boleh dianggap sebagai butang hantar. Oleh itu, pendekatan yang paling selamat adalah untuk memastikan butang yang dibuat secara dinamik juga mempunyai jenis = "butang" ditetapkan.

Ubah suai bahagian fungsi addGuestName yang mencipta butang:

 fungsi addGuestName (obj) {
  const itemClicked = obj;
  const paxid = obj.id;
  const addpaxNamebutton = itemClicked.NextElementSibling; // Andaikan ini adalah butang addpaxNamebutton.style.display = 'inline-block' yang sedia ada;
  // Pastikan butang dibuat di sini atau butang yang ada mempunyai Type = "Button"
  // Jika ia dibuat secara dinamik, anda boleh menetapkannya di sini // addPaxNameButton.setAttribute ('Type', 'Button'); // Jika anda perlu mengubah suai jenis butang sedia ada var addpaxNameField = document.createElement ('input');
  addPaxNameField.setAttribute ('type', 'text');
  addPaxNameField.SetAttribute ('Nama', 'VisitOnNamesurname []');
  addPaxNameField.SetAttribute ('Placeholder', 'Masukkan Nama & Keluarga');
  itemClicked.ParentNode.insertBefore (addPaxNameField, itemClicked.NextSibling);
  addPaxNameField.setAttribute ("diperlukan", "diperlukan");

  // Dengarkan acara klik butang Tambah Button AddPaxNameButton.AddeventListener ('klik', () => {
    const name = addPaxNameField.Value;
    UpdateguestName (paxid, nama);
    // Di sini anda boleh mempertimbangkan untuk mengeluarkan kotak input atau melumpuhkan butang untuk memberikan maklum balas pengguna});
}

2. Segarkan semula halaman semasa selepas permintaan pengambilan berjaya.

Selepas menghalang lompatan halaman, kita perlu menyegarkan semula halaman semasa untuk memaparkan data terkini selepas permintaan FETCH berjaya diselesaikan dan data dikemas kini. Ini boleh dicapai melalui kaedah lokasi.reload ().

Kaedah lokasi.reload () akan memuatkan semula dokumen semasa. Ia mempunyai parameter Boolean pilihan yang, jika ditetapkan kepada benar, memaksa penyemak imbas untuk memuatkan semula halaman dari pelayan dan bukannya memuatkannya dari cache. Biasanya, tiada parameter atau ditetapkan kepada palsu akan mencukupi.

Mengintegrasikan lokasi.reload () ke dalam fungsi async anda:

 Fungsi Async UpdateguestName (paxid, nama) {
  const paxidbody = json.stringify ({pxid: paxid, name: name}); // Kaedah Stringification JSON Console.log ("Paxid:", PaxidBody);
  Cuba {
    tetapan const = {
      Kaedah: "pos",
      tajuk: {
        "Kandungan-jenis": "Aplikasi/json; charset = UTF-8"
      },
      Badan: Paxidbody,
    };
    tindak balas const = menunggu pengambilan (
      "/Change-name.php",
      tetapan
    );

    jika (! response.ok) {// semak kod status respons HTTP membuang ralat baru (`HTTP ERROR! Status: $ {response.status}`);
    }

    const data = menunggu tindak balas.json ();
    Console.log ("Data:", Data);

    // Selepas permintaan berjaya dan data diproses, muat semula lokasi halaman semasa.reload ();

  } menangkap (ralat) {
    console.error ("Ralat:", ralat); // Gunakan konsol.error untuk mencetak ralat // anda boleh memaparkan mesej ralat kepada pengguna di sini}
}

Perkara yang perlu diperhatikan:

  • Pengendalian Ralat: Dalam permintaan FETCH, atribut respons.ok boleh digunakan untuk memeriksa sama ada kod status respons HTTP berada dalam lingkungan 200-299. Ini adalah kaedah pengendalian ralat yang lebih mantap daripada hanya bergantung pada cuba ... menangkap, kerana mengambil tidak akan membuang kesilapan ketika menghadapi ralat HTTP (seperti 404, 500), hanya apabila terdapat masalah rangkaian.
  • Maklum Balas Pengguna: Sebelum halaman menyegarkan, anda boleh mempertimbangkan untuk memberi pengguna maklum balas ringkas, seperti memaparkan mesej "Mengemaskini ..." atau "Kemas kini berjaya!" untuk meningkatkan pengalaman pengguna.
  • JSON.Stringify: Menggunakan json.stringify () untuk membina badan permintaan JSON adalah lebih selamat dan lebih mantap daripada rentetan splicing secara manual, dan boleh mengelakkan kesilapan format yang berpotensi dan masalah suntikan.

PHP backend endpoint

Titik akhir backend PHP anda adalah cara yang betul untuk mengembalikan data JSON, kerana ia adalah antara muka API dan tidak boleh cuba mengarahkan halaman.

  Php
header ('jenis kandungan: aplikasi/json; charset = utf-8');
// Andaikan bahawa status $ dan pembolehubah mesej $ telah ditetapkan berdasarkan hasil operasi pangkalan data $ myObj = new \ stdclass ();
$ myObj-> status = $ status;
$ myObj-> mesej = $ mesej;
$ myjson = json_encode ($ myObj);
echo $ myjson;
?>

Kod PHP ini adalah tindak balas API JSON standard, ia tidak mengakibatkan navigasi penyemak imbas, jadi masalahnya adalah dengan tingkah laku lalai butang frontend.

Meringkaskan

Untuk mencapai tinggal di halaman semasa dan menyegarkannya selepas permintaan post yang tidak disengajakan, kunci adalah:

  1. Mencegah navigasi lalai: Pastikan butang yang mencetuskan permintaan pengambilan mempunyai atribut Type = "Button", atau jika butang dalam bentuk, gunakan Event.PreventDefault () untuk mengelakkan tingkah laku penyerahan lalai borang.
  2. Refresh Page: Selepas permintaan FETCH berjaya diselesaikan dan data tindak balas diproses, location.reload () dipanggil untuk menyegarkan halaman semasa untuk memaparkan status data terkini.

Melalui langkah-langkah di atas, anda akan dapat membina proses kemas kini data asynchronous yang lebih mesra pengguna dan berfungsi.

Atas ialah kandungan terperinci Tutorial mengenai pencegahan halaman melompat dan menyegarkan halaman semasa setelah menggunakan permintaan post asynchronous. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT

Stock Market GPT

Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana cara memeriksa sama ada alamat e -mel sah dalam php? Bagaimana cara memeriksa sama ada alamat e -mel sah dalam php? Sep 21, 2025 am 04:07 AM

UseFilter_var () TOVALIDATEMailSyntaxandCheckDnsrr () TOVERIFYDOnMAINMXRECORDS.example: $ e -mel = "user@example.com"; if (filter_var ($ e -mel, filter_email) && checkDnsrr (expode '

MySQL Agregasi Bersyarat: Gunakan Penyataan Kes untuk Melaksanakan Sumsum dan Mengira Kondisi Simpanan MySQL Agregasi Bersyarat: Gunakan Penyataan Kes untuk Melaksanakan Sumsum dan Mengira Kondisi Simpanan Sep 16, 2025 pm 02:39 PM

Artikel ini membincangkan secara mendalam bagaimana menggunakan pernyataan kes untuk melakukan pengagregatan bersyarat di MySQL untuk mencapai penjumlahan bersyarat dan mengira bidang tertentu. Melalui kes sistem langganan praktikal, ia menunjukkan bagaimana secara dinamik mengira jumlah tempoh dan bilangan peristiwa berdasarkan status rekod (seperti "akhir" dan "membatalkan"), dengan itu mengatasi batasan fungsi jumlah tradisional yang tidak dapat memenuhi keperluan pengagregatan bersyarat kompleks. Tutorial menganalisis penerapan pernyataan kes dalam jumlah fungsi secara terperinci dan menekankan pentingnya bersatu ketika berurusan dengan nilai nol yang mungkin dari gabungan kiri.

Bagaimana membuat salinan atau klon objek yang mendalam dalam php? Bagaimana membuat salinan atau klon objek yang mendalam dalam php? Sep 21, 2025 am 12:30 AM

UseUnserialize (Serialize ($ obj)) fordeepcopyingWhenallDataisserizable; jika tidak, pelaksanaan__clone () tomanuallyduplicatenestedObjectsandavoidsharedReferences.

Bagaimana untuk menggabungkan dua tatasusunan dalam PHP? Bagaimana untuk menggabungkan dua tatasusunan dalam PHP? Sep 21, 2025 am 12:26 AM

UseArray_Merge () toCombineArrays, OverwritingDuplicateStringKeySandreIndexingNumericKeys; forsimplerconcatenation, terutamaInphp5.6, usethesplatoperator [... $ array1, ... $ array2].

Bagaimana cara menggunakan ruang nama dalam projek PHP? Bagaimana cara menggunakan ruang nama dalam projek PHP? Sep 21, 2025 am 01:28 AM

Namespacesinphporganizecodeandpreventnamingnamingconflictsbygroupinglasses, antara muka, fungsi, dan constantsunderaspecificname.2.defineAnamespaceusingthenamespaceywordetopofafile, diikuti olehbythenamespaceakenam

Bagaimana untuk mengemas kini rekod dalam pangkalan data dengan PHP? Bagaimana untuk mengemas kini rekod dalam pangkalan data dengan PHP? Sep 21, 2025 am 04:47 AM

Toupdateadatabaserecordinphp, firstConnectusingPdoormySqli, thenusePePreparedStatementStoExecuteAseCureSqlupDateQuery.example: $ pdo = newpdo ("mysql: host = localhost; dbName = your_database: $ userbase: $ userbase"

Apakah kaedah sihir dalam php dan memberikan contoh `__call ()` dan `__get ()`. Apakah kaedah sihir dalam php dan memberikan contoh `__call ()` dan `__get ()`. Sep 20, 2025 am 12:50 AM

The__call () methodistriggeredWhenaninaccessibleorundefinedmethodiscalledonanObject, membolehkanCustomHandlylyAccepteThemeThodnamnamnamnents, asshownwhencallingundefinedmethodslikesayhello ()

Bagaimana untuk mendapatkan sambungan fail dalam PHP? Bagaimana untuk mendapatkan sambungan fail dalam PHP? Sep 20, 2025 am 05:11 AM

UsePathinfo ($ FileName, pathinfo_extension) togetthefileextension; itreliLyHandlesmultipledotsandgecases, returnTheExtension (mis., "Pdf") Oranemptystringifnoneexists.

See all articles