Apakah ada cara untuk mengirim data menggunakan metode POST tanpa formulir dan tanpa menyegarkan halaman hanya menggunakan JavaScript murni (bukan jQuery $.post()
)? Mungkin httprequest
atau yang lainnya (tidak bisa menemukannya sekarang)?
140
Jawaban:
Anda dapat mengirimnya dan memasukkan data ke badan:
Omong-omong, untuk mendapatkan permintaan:
sumber
Fetch API [new-ish pada saat penulisan pada tahun 2017] dimaksudkan untuk membuat permintaan GET mudah, tetapi juga dapat POST.
Jika Anda malas seperti saya (atau lebih suka jalan pintas / pembantu):
sumber
Anda dapat menggunakan
XMLHttpRequest
objek sebagai berikut:Kode itu akan dikirim
someStuff
keurl
. Pastikan saja ketika Anda membuatXMLHttpRequest
objek Anda , itu akan kompatibel lintas-browser. Ada banyak contoh yang tak ada habisnya tentang bagaimana melakukannya.sumber
someStuff
?someStuff
bisa menjadi apa pun yang Anda inginkan bahkan string sederhana. Anda dapat memeriksa permintaan menggunakan layanan online seperti favorit pribadi saya: ( requestb.in )application/x-www-form-urlencoded
tipe MIME tidak memilikicharset
parameter: iana.org/assignments/media-types/application/...Selain itu, RESTful memungkinkan Anda mendapatkan data kembali dari permintaan POST .
JS (masukkan static / hello.html untuk melayani melalui Python):
Server Python (untuk pengujian):
Log konsol (chrome):
Log konsol (firefox):
Log konsol (Tepi):
Log Python:
sumber
Ada metode mudah untuk membungkus data Anda dan mengirimkannya ke server seolah-olah Anda mengirim formulir HTML menggunakan
POST
. Anda dapat melakukannya menggunakanFormData
objek sebagai berikut:sekarang Anda dapat menangani data di sisi server seperti cara Anda menangani Formulir HTML reugular.
Informasi tambahan
Disarankan bahwa Anda tidak boleh mengatur header Tipe Konten saat mengirim FormData karena browser akan mengurusnya.
sumber
FormData
akan membuat permintaan bentuk multi-bagian alih-alihapplication/x-www-form-urlencoded
permintaannavigator.sendBeacon ()
Jika Anda hanya perlu
POST
data dan tidak memerlukan respons dari server, solusi terpendek adalah menggunakannavigator.sendBeacon()
:sumber
navigator.sendBeacon
tidak dimaksudkan untuk digunakan untuk tujuan ini menurut saya.Anda dapat menggunakan XMLHttpRequest, fetch API, ...
Jika Anda ingin menggunakan XMLHttpRequest, Anda dapat melakukan hal berikut
Atau jika Anda ingin menggunakan API ambil
sumber
Tahukah Anda bahwa JavaScript memiliki metode dan lib bawaan untuk membuat formulir dan mengirimkannya?
Saya melihat banyak balasan di sini semua meminta untuk menggunakan perpustakaan pihak ke-3 yang menurut saya berlebihan.
Saya akan melakukan hal berikut dalam Javascript murni:
Dengan cara ini (A) Anda tidak perlu bergantung pada pihak ketiga untuk melakukan pekerjaan itu. (B) Semuanya built-in untuk semua browser, (C) lebih cepat, (D) berfungsi, jangan ragu untuk mencobanya.
Saya harap ini membantu. H
sumber