Saya ingin mengirim beberapa data menggunakan XMLHttpRequest dalam JavaScript.
Katakanlah saya memiliki formulir berikut dalam HTML:
<form name="inputform" action="somewhere" method="post">
<input type="hidden" value="person" name="user">
<input type="hidden" value="password" name="pwd">
<input type="hidden" value="place" name="organization">
<input type="hidden" value="key" name="requiredkey">
</form>
Bagaimana saya bisa menulis yang setara menggunakan XMLHttpRequest di JavaScript?
javascript
ajax
post
xmlhttprequest
Jack Greenhill
sumber
sumber
params
daripada string seperti di jQuery?Connection
danContent-Length
header tidak dapat diatur. Itu akan mengatakan "Menolak untuk mengatur judul" panjang konten "" yang tidak aman. Lihat stackoverflow.com/a/2624167/632951application/json
permintaan?Atau jika Anda dapat mengandalkan dukungan browser Anda dapat menggunakan FormData :
sumber
http.setRequestHeader("Content-length", params.length);
danhttp.setRequestHeader("Connection", "close");
. Apakah mereka dibutuhkan? Apakah mungkin hanya diperlukan di browser tertentu? (Ada komentar di halaman lain yang mengatakan bahwa pengaturan tajuk Panjang Konten adalah "apa yang dibutuhkan")Content-Type
berubah secara otomatismultipart/form-data
. Ini memiliki implikasi serius pada sisi server dan bagaimana informasi diakses di sana.Gunakan JavaScript modern!
Saya sarankan melihat ke dalam
fetch
. Ini setara dengan ES5 dan menggunakan Janji. Ini jauh lebih mudah dibaca dan mudah disesuaikan.Di Node.js, Anda harus mengimpor
fetch
menggunakan:Jika Anda ingin menggunakannya secara sinkron (tidak berfungsi dalam cakupan teratas):
Info lebih lanjut:
Dokumentasi Mozilla
Dapatkah Saya Menggunakan (95% Mar 2020)
David Walsh Tutorial
sumber
function()
contoh jika Anda tidak suka=>
. Anda harus benar-benar menggunakan JS modern untuk memudahkan pengalaman pengembang. Khawatir tentang persentase kecil orang yang terjebak pada IE tidak layak kecuali Anda adalah perusahaan besarthis
kata kunci. Saya suka menyebutkan itu, tapi saya juga diam-diam membenci orang yang menggunakanthis
, dan arsitektur warisan bukan fungsi pabrik. Maafkan saya, saya simpul.this
seperti wabah juga, dan harus ada yang membacathis
.this
.Penggunaan minimal
FormData
untuk mengirimkan permintaan AJAXCatatan
Ini tidak sepenuhnya menjawab pertanyaan OP karena mengharuskan pengguna untuk mengklik untuk mengirim permintaan. Tetapi ini mungkin berguna bagi orang yang mencari solusi sederhana semacam ini.
Contoh ini sangat sederhana dan tidak mendukung
GET
metode ini. Jika Anda tertarik dengan contoh yang lebih canggih, silakan lihat dokumentasi MDN yang luar biasa . Lihat juga jawaban serupa tentang XMLHttpRequest to Post HTML Form .Batasan solusi ini: Seperti yang ditunjukkan oleh Justin Blank dan Thomas Munk (lihat komentar mereka),
FormData
tidak didukung oleh IE9 dan lebih rendah, dan browser default pada Android 2.3.sumber
FormData
didukung oleh banyak browser kecuali IE9 dan Android 2.3 (dan OperaMini tetapi yang terakhir ini tidak banyak digunakan). Cheers ;-)onsubmit="return submitForm(this);"
jika tidak, pengguna akan diarahkan ke URL dalam permintaan.false
. Jikatrue
dikembalikan, permintaan POST asli (tidak diinginkan) akan dikirimkan! Jawaban Anda benar, maaf atas kebingungan.Pastikan bahwa Backend API Anda dapat mengurai JSON.
Misalnya, di Express JS:
sumber
TIDAK PERLU PLUGIN!
Pilih kode di bawah ini dan seret ke dalam BOOKMARK BAR ( jika Anda tidak melihatnya, aktifkan dari Pengaturan Browser ), lalu EDIT tautan itu:
Itu saja! Sekarang Anda dapat mengunjungi situs web apa pun, dan klik tombol itu di BAR BOOKMARK !
CATATAN:
Metode di atas mengirim data menggunakan
XMLHttpRequest
metode, jadi, Anda harus berada di domain yang sama saat memicu skrip. Itu sebabnya saya lebih suka mengirim data dengan simulasi PENGIRIMAN FORMULIR, yang dapat mengirim kode ke domain apa pun - di sini adalah kode untuk itu:sumber
XmlHttpRequest
dengan jawaban Anda: |Saya menghadapi masalah yang sama, menggunakan pos yang sama dan dan tautan ini telah saya atasi masalah saya.
Tautan ini telah menyelesaikan informasi.
sumber
sumber
Cobalah untuk menggunakan objek json, bukan formdata. di bawah ini adalah kode yang berfungsi untuk saya. formdata juga tidak bekerja untuk saya, maka saya datang dengan solusi ini.
sumber
Hanya untuk pembaca fitur yang menemukan pertanyaan ini. Saya menemukan bahwa jawaban yang diterima berfungsi dengan baik selama Anda memiliki jalur yang diberikan, tetapi jika Anda membiarkannya kosong itu akan gagal di IE. Inilah yang saya pikirkan:
Anda dapat melakukannya seperti ini:
sumber
Ada beberapa duplikat yang menyentuh ini, dan tidak ada yang benar-benar menguraikannya. Saya akan meminjam contoh jawaban yang diterima untuk menggambarkan
Saya terlalu menyederhanakan ini (saya menggunakan
http.onload(function() {})
alih-alih metodologi yang lebih tua dari jawaban itu) demi ilustrasi. Jika Anda menggunakan apa adanya, Anda akan menemukan server Anda mungkin mengartikan tubuh POST sebagai string dan bukankey=value
parameter aktual (mis. PHP tidak akan menampilkan$_POST
variabel apa pun ). Anda harus melewati form header untuk mendapatkan itu, dan lakukan itu sebelumnyahttp.send()
Jika Anda menggunakan JSON dan bukan data yang disandikan URL, kirimkan
application/json
sajasumber
Ini membantu saya karena saya hanya ingin menggunakan
xmlHttpRequest
dan memposting objek sebagai data formulir:https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript
sumber