Saya perlu melakukan permintaan GET HTTP dalam JavaScript. Apa cara terbaik untuk melakukan itu?
Saya perlu melakukan ini di widget kode dasbor Mac OS X.
javascript
xcode
http-get
dashcode
mclaughlinj
sumber
sumber
Jawaban:
Browser (dan Dashcode) menyediakan objek XMLHttpRequest yang dapat digunakan untuk membuat permintaan HTTP dari JavaScript:
Namun, permintaan sinkron tidak disarankan dan akan menghasilkan peringatan di sepanjang baris:
Anda harus membuat permintaan asinkron dan menangani respons di dalam pengendali event.
sumber
Di jQuery :
sumber
Banyak saran bagus di atas, tetapi tidak terlalu dapat digunakan kembali, dan terlalu sering diisi dengan DOM omong kosong dan bulu-bulu lain yang menyembunyikan kode mudah.
Inilah kelas Javascript yang kami buat yang dapat digunakan kembali dan mudah digunakan. Saat ini hanya memiliki metode GET, tetapi itu bekerja untuk kita. Menambahkan POST seharusnya tidak membebani keterampilan siapa pun.
Menggunakannya semudah:
sumber
ReferenceError: XMLHttpRequest is not defined
window.fetch
API baru adalah pengganti yang lebih bersih untukXMLHttpRequest
yang menggunakan janji-janji ES6. Ada penjelasan yang bagus di sini , tetapi intinya adalah (dari artikel):Dukungan browser sekarang bagus dalam rilis terbaru (berfungsi di Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), browser Android, dan Chrome untuk Android), namun IE akan kemungkinan tidak mendapatkan dukungan resmi. GitHub memiliki polyfill yang tersedia yang direkomendasikan untuk mendukung browser lama yang sebagian besar masih digunakan (terutama versi Safari sebelum Maret 2017 dan browser seluler dari periode yang sama).
Saya kira apakah ini lebih nyaman daripada jQuery atau XMLHttpRequest atau tidak tergantung pada sifat proyek.
Berikut tautan ke spec https://fetch.spec.whatwg.org/
Edit :
Menggunakan ES7 async / menunggu, ini menjadi sederhana (berdasarkan Gist ini ):
sumber
fetch(url, { credentials:"include" })
window.fetch
tidak datang dengan parser XML, tetapi Anda dapat mengurai sendiri respons jika Anda menanganinya sebagai teks (bukan json seperti pada contoh di atas). Lihat stackoverflow.com/a/37702056/66349 untuk contohVersi tanpa panggilan balik
sumber
setInterval
panggilan.Berikut adalah kode untuk melakukannya secara langsung dengan JavaScript. Tetapi, seperti yang disebutkan sebelumnya, Anda akan jauh lebih baik dengan perpustakaan JavaScript. Favorit saya adalah jQuery.
Dalam kasus di bawah ini, halaman ASPX (yang berfungsi sebagai layanan REST orang miskin) dipanggil untuk mengembalikan objek JavaScript JSON.
sumber
sumber
Pendek dan bersih:
sumber
IE akan men-cache URL untuk membuat pemuatan lebih cepat, tetapi jika Anda, katakanlah, polling server pada interval waktu yang mencoba untuk mendapatkan informasi baru, IE akan menyimpan cache URL itu dan kemungkinan akan mengembalikan set data yang sama seperti yang selalu Anda miliki.
Terlepas dari bagaimana Anda akhirnya melakukan permintaan GET Anda - vanilla JavaScript, Prototype, jQuery, dll - pastikan Anda menempatkan mekanisme untuk memerangi caching. Untuk mengatasi itu, tambahkan token unik ke bagian akhir URL yang akan Anda pukul. Ini dapat dilakukan dengan:
Ini akan menambahkan stempel waktu unik ke akhir URL dan akan mencegah terjadinya caching.
sumber
Prototipe membuatnya sangat sederhana
sumber
Satu solusi yang mendukung browser lama:
Mungkin agak berlebihan tetapi Anda pasti aman dengan kode ini.
Pemakaian:
sumber
Saya tidak terbiasa dengan Mac OS Dashcode Widgets, tetapi jika mereka membiarkan Anda menggunakan perpustakaan JavaScript dan mendukung XMLHttpRequests , saya akan menggunakan jQuery dan melakukan sesuatu seperti ini:
sumber
Dalam file Info.plist widget Anda, jangan lupa untuk mengatur
AllowNetworkAccess
kunci Anda menjadi true.sumber
Cara terbaik adalah dengan menggunakan AJAX (Anda dapat menemukan tutorial sederhana di halaman ini Tizag ). Alasannya adalah bahwa teknik lain yang Anda gunakan memerlukan lebih banyak kode, itu tidak dijamin untuk bekerja lintas browser tanpa pengerjaan ulang dan mengharuskan Anda menggunakan lebih banyak memori klien dengan membuka halaman tersembunyi di dalam frame lewat url mengurai data mereka dan menutupnya. AJAX adalah cara untuk masuk dalam situasi ini. Itu saya dua tahun javascript berbicara pengembangan berat.
sumber
Bagi mereka yang menggunakan AngularJs , itu
$http.get
:sumber
Anda bisa mendapatkan permintaan HTTP GET dengan dua cara:
Pendekatan ini berdasarkan format xml. Anda harus melewati URL untuk permintaan tersebut.
Yang ini didasarkan pada jQuery. Anda harus menentukan URL dan function_name yang ingin Anda panggil.
sumber
Untuk melakukan ini Ambil API adalah pendekatan yang disarankan, menggunakan JavaScript Janji. XMLHttpRequest (XHR), objek IFrame atau tag dinamis adalah pendekatan yang lebih lama (dan lebih rumit).
Ini demo pengambilan dan MDN yang bagus
sumber
Hal yang sama dapat dilakukan untuk permintaan pos juga.
Silakan lihat tautan permintaan posting JavaScript ini seperti formulir kirim
sumber
Permintaan async sederhana:
sumber
Ajax
Anda sebaiknya menggunakan perpustakaan seperti Prototipe atau jQuery .
sumber
sumber
Jika Anda ingin menggunakan kode untuk widget Dashboard, dan Anda tidak ingin menyertakan perpustakaan JavaScript di setiap widget yang Anda buat, maka Anda dapat menggunakan objek XMLHttpRequest yang didukung Safari secara asli.
Seperti yang dilaporkan oleh Andrew Hedges, widget tidak memiliki akses ke jaringan, secara default; Anda perlu mengubah pengaturan itu di info.plist yang terkait dengan widget.
sumber
Untuk menyegarkan jawaban terbaik dari joann dengan janji ini adalah kode saya:
sumber
Modern, bersih, dan terpendek
Tampilkan cuplikan kode
sumber
Anda dapat melakukannya dengan JS murni juga:
Lihat: untuk detail lebih lanjut: tutorial html5rocks
sumber
sumber
Berikut ini adalah alternatif untuk file xml untuk memuat file Anda sebagai objek dan mengakses properti sebagai objek dengan cara yang sangat cepat.
XML berfungsi sebagai pohon ok? alih-alih menulis
tulis file sederhana seperti ini:
Simpan file Anda .. Sekarang panggil fungsi ....
sekarang Anda bisa mendapatkan nilai-nilai Anda secara efisien.
Ini hanya hadiah kecil untuk contibute ke grup. Terima kasih atas kesukaan Anda :)
Jika Anda ingin menguji fungsi pada PC Anda secara lokal, restart browser Anda dengan perintah berikut (didukung oleh semua browser kecuali safari):
sumber