Panduan untuk vanila ajax tanpa jQuery
- Ajax, pendek untuk JavaScript dan XML Asynchronous, membolehkan kemas kini halaman separa, mengurangkan keperluan untuk menyegarkan halaman penuh dan membolehkan lebih banyak pengalaman pengguna cecair. Anatomi asas permintaan AJAX melibatkan membuat contoh kelas yang diperlukan untuk permintaan HTTP, menyatakan kaedah permintaan HTTP dan URL halaman, dan menghantar permintaan.
- Walaupun jQuery dapat memudahkan permintaan Ajax, ia tidak selalu diperlukan. AJAX API dalam vanila JavaScript telah mengalami penambahbaikan yang ketara, dan spesifikasi XMLHTTPREQUEST kini dianggap sebagai entiti tunggal dari perspektif piawaian, yang menunjukkan komitmen oleh masyarakat untuk berpegang pada satu standard. Vanilla Ajax menyediakan API front-end yang fleksibel dan moden. Ia membolehkan menetapkan tajuk permintaan, menyatakan jenis tindak balas yang diharapkan dari pelayan, dan menghancurkan cache penyemak imbas. Walaupun Ajax pernah menjadi proses yang kompleks, ia menjadi lebih mudah dan mesra pengguna.
- Pendek untuk JavaScript dan XML Asynchronous, Ajax adalah mekanisme untuk membuat kemas kini halaman separa. Ia membolehkan anda mengemas kini bahagian halaman dengan data yang datang dari pelayan, sambil mengelakkan keperluan untuk menyegarkan penuh. Membuat kemas kini separa dengan cara ini boleh menjadi berkesan dalam mewujudkan pengalaman pengguna cecair dan dapat mengurangkan beban yang diletakkan pada pelayan.
di sini, kami membuat contoh kelas yang diperlukan untuk membuat permintaan HTTP ke pelayan. Kami kemudian memanggil kaedah terbuka, menyatakan kaedah permintaan HTTP sebagai parameter pertama dan URL halaman yang kami minta sebagai yang kedua. Akhirnya, kami memanggil kaedah hantarnya melewati null sebagai parameter. Sekiranya pasca permintaan (di sini kami menggunakan GET), parameter ini harus mengandungi sebarang data yang ingin kami hantar dengan permintaan.
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
OnreadyStatechange adalah asynchronous, yang bermaksud ia akan dipanggil pada bila -bila masa. Jenis -jenis fungsi ini adalah panggilan balik - yang dipanggil sekali beberapa pemprosesan selesai. Dalam kes ini, pemprosesan sedang berlaku di pelayan.
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
untuk jQuery atau tidak untuk jQuery?
Jadi, berita baiknya ialah kod di atas akan berfungsi di semua pelayar utama terkini. Berita buruk itu, baiklah, ia agak rumit. Yuck! Saya sudah mencabut penyelesaian yang elegan.
Menggunakan jQuery, seseorang boleh mengekang keseluruhan coretan ke:
yang bagus. Dan sememangnya bagi ramai, termasuk anda benar -benar, jQuery telah menjadi standard de facto ketika datang ke Ajax. Tetapi, adakah anda tahu apa? Ini tidak perlu berlaku. JQuery wujud untuk mengelilingi API Dom yang hodoh. Tetapi, adakah ia benar -benar
itu$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
Dalam baki artikel ini, saya ingin menyiasat penambahbaikan yang dibuat kepada AJAX API dalam vanila JavaScript. Keseluruhan spesifikasi boleh didapati di W3C. Apa yang menyerang saya mengenai spesifikasi ini adalah nama. Ia tidak lagi "XMLHTTPREQUEST LEVEL 2" tetapi "XMLHTTPREQUEST LEVEL 1" - hasil penggabungan 2011 antara kedua -dua spesifikasi. Melangkah ke hadapan, ia akan diperlakukan sebagai entiti tunggal dari perspektif piawaian dan standard hidup akan dipanggil XMLHTTPREQUEST. Ini menunjukkan bahawa terdapat komitmen oleh masyarakat untuk berpegang pada satu standard, dan ini hanya boleh bermakna berita baik bagi pemaju yang ingin membebaskan diri dari jQuery.
jadi mari mulakan ...
persediaan
Untuk artikel ini, saya menggunakan node.js di back-end. Ya, akan ada JavaScript pada penyemak imbas dan pada pelayan. Back-end node.js adalah bersandar, saya menggalakkan anda untuk memuat turun keseluruhan demo di GitHub dan ikuti. Berikut adalah daging dan kentang apa yang ada di pelayan:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
ini memeriksa URL permintaan untuk menentukan bagaimana aplikasi harus bertindak balas. Jika permintaan itu datang dari direktori skrip, maka fail yang sesuai disampaikan dengan jenis kandungan aplikasi/javascript. Jika tidak, jika permintaan X-diminta-dengan tajuk telah ditetapkan ke XMLHTTPREQUEST maka kami tahu kami berurusan dengan permintaan AJAX dan kami boleh bertindak balas dengan sewajarnya. Dan jika kedua -dua ini tidak berlaku, paparan fail/index.html dihidangkan.
Saya akan memperluaskan bahagian yang dikomentari ketika kami menyelam ke dalam respons AJAX dari pelayan. Di Node.js, saya terpaksa melakukan pengangkat berat dengan render dan httphandler:
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
fungsi render secara tidak semestinya membaca kandungan fail yang diminta. Ia diluluskan rujukan kepada fungsi httphandler, yang kemudiannya dilaksanakan sebagai panggilan balik. Fungsi httphandler memeriksa untuk kehadiran objek ralat (yang akan hadir, sebagai contoh, jika fail yang diminta tidak dapat dibuka). Menyediakan segala -galanya baik, ia kemudian melayani kandungan fail dengan kod status HTTP dan jenis kandungan yang sesuai.
Menguji API
Seperti dengan API back-end bunyi, mari kita tulis beberapa ujian unit untuk memastikan ia berfungsi. Untuk ujian ini, saya menyeru Supertest dan Mocha untuk mendapatkan bantuan:
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
Ini memastikan bahawa aplikasi kami bertindak balas dengan jenis kandungan yang betul dan kod status HTTP kepada permintaan yang berbeza. Sebaik sahaja anda memasang kebergantungan, anda boleh menjalankan ujian ini dari arahan menggunakan ujian npm.
antara muka
Sekarang, mari kita lihat antara muka pengguna yang kami bina di HTML:
// app.js var app = http.createServer(function (req, res) { if (req.url.indexOf('/scripts/') >= 0) { render(req.url.slice(1), 'application/javascript', httpHandler); } else if (req.headers['x-requested-with'] === 'XMLHttpRequest') { // Send Ajax response } else { render('views/index.html', 'text/html', httpHandler); } });
HTML kelihatan bagus dan kemas. Seperti yang anda lihat, semua kegembiraan sedang berlaku dalam JavaScript.
onreadystate vs onload
Jika anda pergi melalui mana -mana buku Ajax kanonik, anda mungkin dapati di mana -mana sahaja. Fungsi panggil balik ini dilengkapi dengan IF bersarang dan banyak bulu yang menjadikannya sukar untuk diingat dari bahagian atas kepala anda. Mari letakkan acara onreadystate dan onload kepala ke kepala.
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
ini adalah output dalam konsol:
berjaya . Oleh itu, acara Onload adalah API moden yang boleh digunakan dengan baik dalam beberapa saat. Acara OnreadyState ada untuk menjadi serasi ke belakang. Tetapi, acara onload mestilah alat pilihan anda. Acara Onload kelihatan seperti panggilan balik kejayaan pada jQuery, bukan?
Sudah tiba masanya untuk menetapkan dumbbells 5 lb dan beralih ke keriting lengan.Menetapkan Headers Permintaan
JQuery menetapkan pengepala permintaan di bawah penutup supaya teknologi back-end anda tahu ia adalah permintaan Ajax. Secara umum, back-end tidak peduli di mana permintaan GET datang selagi ia menghantar respons yang betul. Ini berguna apabila anda ingin menyokong Ajax dan HTML dengan API Web yang sama. Oleh itu, mari kita lihat cara menetapkan tajuk permintaan di Vanilla Ajax:
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
// app.js var app = http.createServer(function (req, res) { if (req.url.indexOf('/scripts/') >= 0) { render(req.url.slice(1), 'application/javascript', httpHandler); } else if (req.headers['x-requested-with'] === 'XMLHttpRequest') { // Send Ajax response } else { render('views/index.html', 'text/html', httpHandler); } });
// app.js function render(path, contentType, fn) { fs.readFile(__dirname + '/' + path, 'utf-8', function (err, str) { fn(err, str, contentType); }); } var httpHandler = function (err, str, contentType) { if (err) { res.writeHead(500, {'Content-Type': 'text/plain'}); res.end('An error has occured: ' + err.message); } else { res.writeHead(200, {'Content-Type': contentType}); res.end(str); } };
Kami berada di rumah dan tidak melanggar peluh! Anda mungkin tertanya -tanya, apa lagi yang ada untuk mengetahui tentang Ajax? Bagaimana dengan beberapa helah yang kemas.
Jenis Respons
Anda mungkin tertanya -tanya mengapa responsetext mengandungi respons pelayan apabila semua yang saya bekerjasama adalah JSON lama biasa. Ternyata, itu kerana saya tidak menetapkan reponsetype yang betul. Atribut Ajax ini sangat bagus untuk memberitahu API depan apa jenis tindak balas yang diharapkan dari pelayan. Jadi, mari kita gunakan dengan baik:
var xhr = new XMLHttpRequest(); xhr.open('GET', 'send-ajax-data.php'); xhr.send(null);
Awesome, bukannya menghantar teks biasa yang saya harus menghuraikan JSON, saya dapat memberitahu API apa yang diharapkan. Ciri ini tersedia di hampir semua pelayar utama terkini. JQuery, tentu saja, apakah jenis penukaran ini secara automatik. Tetapi tidakkah kita sekarang mempunyai cara yang mudah untuk melakukan perkara yang sama di JavaScript biasa? Vanilla Ajax mempunyai sokongan untuk banyak jenis tindak balas lain, termasuk XML.
Sayangnya, di Internet Explorer cerita itu tidak begitu hebat. Sehingga IE 11, pasukan belum menambah sokongan untuk XHR.ResponseType = 'JSON'. Ciri ini adalah untuk tiba di Microsoft Edge. Tetapi, pepijat telah cemerlang selama hampir dua tahun pada masa penulisan. Saya rasa adalah orang -orang di Microsoft telah bekerja keras untuk merombak penyemak imbas. Mari kita berharap Microsoft Edge, AKA Project Spartan, menyampaikan janji -janjinya.
Alas, jika anda mesti mendapatkan isu ini iaitu:
xhr.onreadystatechange = function () { var DONE = 4; // readyState 4 means the request is done. var OK = 200; // status 200 is a successful return. if (xhr.readyState === DONE) { if (xhr.status === OK) { console.log(xhr.responseText); // 'This is the returned text.' } else { console.log('Error: ' + xhr.status); // An error occurred during the request. } } };
Cache busting
Satu penyemak imbas ciri orang cenderung lupa ialah keupayaan permintaan Ajax caching. Sebagai contoh, Internet Explorer melakukan ini secara lalai. Saya pernah bergelut selama berjam -jam cuba memikirkan mengapa Ajax saya tidak berfungsi kerana ini. Nasib baik, jQuery membongkar cache penyemak imbas secara lalai. Nah, anda juga boleh di Ajax biasa dan ia cukup mudah:
$.ajax({ url: 'send-ajax-data.php', }) .done(function(res) { console.log(res); }) .fail(function(err) { console.log('Error: ' + err.status); });
setiap dokumentasi jQuery, semua yang dilakukan adalah menambahkan rentetan pertanyaan timestamp ke akhir permintaan. Ini menjadikan permintaan itu agak unik dan busts cache penyemak imbas. Anda dapat melihat bagaimana rupa ini ketika anda memadamkan permintaan http ajax:
Kesimpulan
Saya harap anda telah menikmati 300lb Bench Press Vanilla Ajax dulu. Satu pada suatu masa, Ajax adalah binatang yang mengerikan, tetapi tidak lagi. Sebenarnya, kami telah merangkumi semua asas Ajax tanpa tongkat, belenggu, jQuery.
Saya akan meninggalkan anda dengan cara yang ringkas untuk membuat panggilan Ajax:
// app.js var app = http.createServer(function (req, res) { if (req.url.indexOf('/scripts/') >= 0) { render(req.url.slice(1), 'application/javascript', httpHandler); } else if (req.headers['x-requested-with'] === 'XMLHttpRequest') { // Send Ajax response } else { render('views/index.html', 'text/html', httpHandler); } });
Jangan lupa, anda boleh mencari seluruh demo di GitHub. Saya mengalu -alukan mendengar pemikiran anda dengan dan tanpa jQuery dalam komen.
Soalan Lazim (Soalan Lazim) di Vanilla Ajax tanpa JQuery
Apakah vanila ajax dan bagaimanakah ia berbeza dari jQuery Ajax? Walaupun JQuery Ajax menyediakan kaedah yang serasi dengan silang, penyemak imbas untuk mengendalikan Ajax, Vanilla Ajax memberi anda lebih banyak kawalan dan pemahaman tentang proses yang mendasari. Ia juga merupakan pilihan yang hebat jika anda ingin mengurangkan kebergantungan pada perpustakaan luaran seperti jQuery.
Bagaimana saya membuat permintaan Ajax asas menggunakan vanila JavaScript? Objek ini membolehkan anda menghantar permintaan HTTP atau HTTPS ke pelayan web dan memuatkan data respons pelayan kembali ke skrip anda. Berikut adalah contoh mudah:
var xhr = new xmlhttprequest ();
xhr.onreadyStateChange = function () {
console.log (json.parse (xhr.responsetext));
Pengendalian ralat dalam vanila ajax boleh dilakukan dengan menggunakan pengendali acara onError objek XMLHTTPREQUEST. Acara ini dicetuskan apabila ralat berlaku semasa membuat permintaan AJAX. Berikut adalah contoh:
var xhr = new XmlHttPrequest ();
var xhr = new XmlHttPrequest ();
Adakah vanila ajax disokong oleh semua penyemak imbas? Walau bagaimanapun, versi lama Internet Explorer (iaitu 6 dan lebih awal) menggunakan objek ActiveX untuk Ajax.
Atas ialah kandungan terperinci Panduan untuk vanila ajax tanpa jQuery. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing
