Saya mencoba mengarahkan browser ke halaman lain. Jika saya menginginkan permintaan GET, saya bisa mengatakan
document.location.href = 'http://example.com/q=a';
Tetapi sumber daya yang saya coba akses tidak akan merespons dengan baik kecuali jika saya menggunakan permintaan POST. Jika ini tidak dihasilkan secara dinamis, saya mungkin menggunakan HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Maka saya hanya akan menyerahkan formulir dari DOM.
Tapi sungguh saya ingin kode JavaScript yang memungkinkan saya untuk mengatakan
post_to_url('http://example.com/', {'q':'a'});
Apa implementasi lintas browser terbaik?
Edit
Maaf saya tidak jelas. Saya memerlukan solusi yang mengubah lokasi browser, seperti mengirim formulir. Jika ini dimungkinkan dengan XMLHttpRequest , itu tidak jelas. Dan ini seharusnya tidak asinkron, juga tidak menggunakan XML, jadi Ajax bukanlah jawabannya.
Jawaban:
Buat secara dinamis
<input>
dalam bentuk dan kirimkanContoh:
EDIT : Karena ini telah banyak dinaikkan, saya kira orang akan banyak menyalin-menempel ini. Jadi saya menambahkan tanda
hasOwnProperty
centang untuk memperbaiki bug yang tidak disengaja.sumber
Ini akan menjadi versi dari jawaban yang dipilih menggunakan jQuery .
sumber
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Implementasi sederhana dari @Aaron jawaban cepat dan kotor:
Tentu saja, Anda sebaiknya menggunakan kerangka kerja JavaScript seperti Prototipe atau jQuery ...
sumber
Menggunakan
createElement
fungsi yang disediakan dalam jawaban ini , yang diperlukan karena kehancuran IE dengan atribut nama pada elemen yang dibuat secara normal dengandocument.createElement
:sumber
Jawaban Rakesh Pai luar biasa, tetapi ada masalah yang terjadi pada saya (di Safari ) ketika saya mencoba mengirim formulir dengan bidang yang disebut
submit
. Sebagai contohpost_to_url("http://google.com/",{ submit: "submit" } );
,. Saya telah menambal fungsi sedikit untuk berjalan di sekitar tabrakan ruang variabel ini.sumber
Tidak. Anda tidak dapat memiliki permintaan posting JavaScript seperti mengirim formulir.
Apa yang dapat Anda miliki adalah formulir dalam HTML, lalu kirimkan dengan JavaScript. (seperti yang dijelaskan berulang kali di halaman ini).
Anda dapat membuat HTML sendiri, Anda tidak perlu JavaScript untuk menulis HTML. Itu akan konyol jika orang menyarankan itu.
Fungsi Anda hanya akan mengonfigurasi formulir seperti yang Anda inginkan.
Lalu, gunakan seperti.
Tapi saya hanya akan meninggalkan fungsi dan hanya melakukannya.
Akhirnya, keputusan gaya masuk dalam file ccs.
Secara pribadi saya pikir formulir harus diatasi dengan nama tetapi itu tidak penting saat ini.
sumber
Jika Prototipe telah diinstal, Anda dapat mengencangkan kode untuk membuat dan mengirimkan formulir tersembunyi seperti ini:
sumber
ini adalah jawaban dari rakesh, tetapi dengan dukungan untuk array (yang cukup umum dalam bentuk):
javascript biasa:
oh, dan inilah versi jquery: (kode yang sedikit berbeda, tetapi bermuara pada hal yang sama)
sumber
Salah satu solusinya adalah menghasilkan formulir dan mengirimkannya. Salah satu implementasi adalah
Jadi saya bisa menerapkan bookmarklet pemendekan URL dengan sederhana
sumber
Yah, seandainya saya telah membaca semua posting lain sehingga saya tidak kehilangan waktu membuat ini dari jawaban Rakesh Pai. Inilah solusi rekursif yang bekerja dengan array dan objek. Tidak ada ketergantungan pada jQuery.
Menambahkan segmen untuk menangani kasus-kasus di mana seluruh formulir harus diserahkan seperti array. (mis. di mana tidak ada objek pembungkus di sekitar daftar item)
sumber
Tiga opsi di sini.
Jawaban JavaScript standar: Gunakan kerangka kerja! Sebagian besar kerangka kerja Ajax akan mengabstraksi Anda cara mudah untuk membuat POST XMLHTTPRequest .
Buat sendiri permintaan XMLHTTPRequest, lewat pos ke metode terbuka alih-alih dapatkan. (Informasi lebih lanjut dalam Menggunakan metode POST dalam XMLHTTPRequest (Ajax) .)
Melalui JavaScript, buat formulir secara dinamis, tambahkan tindakan, tambahkan input Anda, dan kirimkan.
sumber
Saya akan menempuh rute Ajax seperti yang orang lain sarankan dengan sesuatu seperti:
sumber
Cara termudah menggunakan Ajax Post Request:
dimana:
Kemudian pada pengendali sukses, arahkan kembali browser dengan sesuatu seperti window.location.
sumber
Inilah cara saya menulisnya menggunakan jQuery. Diuji dalam Firefox dan Internet Explorer.
sumber
The Prototype perpustakaan termasuk objek Hashtable, dengan metode ".toQueryString ()", yang memungkinkan Anda untuk dengan mudah mengubah JavaScript objek / struktur menjadi gaya permintaan-string string. Karena posting membutuhkan "badan" permintaan untuk menjadi string yang diformat string-kueri, ini memungkinkan permintaan Ajax Anda untuk berfungsi dengan baik sebagai posting. Berikut ini contoh menggunakan Prototipe:
sumber
Ini berfungsi dengan baik dalam kasus saya:
Anda dapat menggunakannya dalam fungsi seperti:
Dengan ini, Anda dapat memposting semua nilai input.
sumber
Namun solusi rekursif lain , karena beberapa yang lain tampaknya rusak (saya tidak menguji semuanya). Yang ini tergantung pada lodash 3.x dan ES6 (jQuery tidak diperlukan):
sumber
Solusi saya akan menyandikan objek yang sangat bersarang, tidak seperti solusi yang saat ini diterima oleh @RakeshPai.
Ia menggunakan pustaka npm 'qs' dan fungsi penguraiannya untuk mengubah objek bersarang menjadi parameter.
Kode ini berfungsi baik dengan back-end Rails, meskipun Anda harus dapat memodifikasinya agar berfungsi dengan backend apa pun yang Anda butuhkan dengan memodifikasi opsi yang dilewatkan untuk dirubah. Rails mengharuskan arrayFormat disetel ke "tanda kurung".
Contoh:
Menghasilkan parameter Rails ini:
sumber
FormObject adalah opsi. Tetapi FormObject tidak didukung oleh sebagian besar browser sekarang.
sumber
Ini seperti opsi Alan 2 (di atas). Bagaimana instantiate httpobj dibiarkan sebagai latihan.
sumber
Ini didasarkan pada kode beauSD menggunakan jQuery. Ini ditingkatkan sehingga bekerja secara rekursif pada objek.
sumber
Anda dapat menambahkan formulir secara dinamis menggunakan DHTML lalu mengirim.
sumber
Anda bisa menggunakan perpustakaan seperti jQuery dan metode $ .post-nya .
sumber
Saya menggunakan java document.forms dan loop untuk mendapatkan semua elemen dalam formulir, kemudian kirim melalui xhttp. Jadi ini solusi saya untuk mengirimkan javascript / ajax (dengan semua html disertakan sebagai contoh):
sumber
Anda dapat menggunakan metode pemicu jQuery untuk mengirimkan formulir, sama seperti Anda menekan tombol, seperti,
itu akan dikirimkan di browser.
sumber
Metode yang saya gunakan untuk mengirim dan mengarahkan pengguna secara otomatis ke halaman lain adalah dengan hanya menulis formulir tersembunyi dan kemudian secara otomatis mengirimkannya. Yakinlah bahwa formulir tersembunyi sama sekali tidak memakan ruang di halaman web. Kode akan menjadi seperti ini:
Aplikasi kirim otomatis
Aplikasi pengiriman otomatis akan mengarahkan nilai formulir yang dimasukkan pengguna secara otomatis di halaman lain kembali ke halaman itu. Aplikasi seperti itu akan seperti ini:
sumber
Inilah cara saya melakukannya.
sumber
Tidak ada solusi di atas yang menangani parar bersarang hanya dengan jQuery, jadi inilah solusi dua sen saya.
Jika Anda menggunakan jQuery dan Anda perlu menangani parameter bersarang yang dalam, Anda dapat menggunakan fungsi ini di bawah:
Berikut adalah contoh cara menggunakannya. Kode html:
Dan jika Anda mengklik tombol tes, itu akan memposting formulir dan Anda akan mendapatkan nilai-nilai berikut di POST:
Catatan: jika Anda ingin memposting formulir ke url lain dari halaman saat ini, Anda dapat menentukan url sebagai argumen kedua dari fungsi postForm.
Jadi misalnya (untuk menggunakan kembali contoh Anda):
Semoga ini membantu.
Note2: kode diambil dari plugin redirect . Saya pada dasarnya hanya menyederhanakannya untuk kebutuhan saya.
sumber
Plugin jQuery untuk redirect dengan POST atau GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Untuk menguji, masukkan file .js di atas atau salin / tempel kelas ke dalam kode Anda, lalu gunakan kode di sini, ganti "args" dengan nama variabel Anda, dan "nilai" dengan nilai-nilai dari masing-masing variabel:
sumber
Anda bisa membuat panggilan AJAX (kemungkinan menggunakan perpustakaan seperti menggunakan Prototype.js atau JQuery). AJAX dapat menangani opsi GET dan POST.
sumber