Dengan metode window.open saya membuka situs baru dengan parameter, yang harus saya lewati melalui metode posting. Saya telah menemukan solusi, tetapi sayangnya itu tidak berhasil. Ini kode saya:
<script type="text/javascript">
function openWindowWithPost(url,name,keys,values)
{
var newWindow = window.open(url, name);
if (!newWindow) return false;
var html = "";
html += "<html><head></head><body><form id='formid' method='post' action='" + url +"'>";
if (keys && values && (keys.length == values.length))
for (var i=0; i < keys.length; i++)
html += "<input type='hidden' name='" + keys[i] + "' value='" + values[i] + "'/>";
html += "</form><script type='text/javascript'>document.getElementById(\"formid\").submit()</sc"+"ript></body></html>";
newWindow.document.write(html);
return newWindow;
}
</script>
Selanjutnya, saya membuat array:
<script type="text/javascript">
var values= new Array("value1", "value2", "value3")
var keys= new Array("a","b","c")
</script>
Dan panggil fungsi dengan:
<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />
Tetapi, ketika saya mengklik tombol ini, situs test.asp kosong (tentu saja saya mencoba mendapatkan nilai lulus - Request.Form("b")
).
Bagaimana saya bisa mengatasi masalah ini, mengapa saya tidak bisa mendapatkan nilai kelulusan?
javascript
luk4443
sumber
sumber
Jawaban:
Alih-alih menulis formulir ke jendela baru (yang sulit untuk diperbaiki, dengan pengkodean nilai dalam kode HTML), cukup buka jendela kosong dan posting formulir ke sana.
Contoh:
Edit:
Untuk mengatur nilai dalam formulir secara dinamis, Anda dapat melakukan seperti ini:
Untuk memposting formulir, Anda memanggil fungsi dengan nilai, seperti
openWindowWithPost('a','b','c');
.Catatan: Saya memvariasikan nama parameter dalam kaitannya dengan nama formulir untuk menunjukkan bahwa mereka tidak harus sama. Biasanya Anda akan membuatnya serupa satu sama lain agar lebih mudah melacak nilainya.
sumber
action
properti formulir.target="_blank"
?_blank
.Karena Anda menginginkan seluruh formulir di dalam javascript, alih-alih menulisnya dalam tag, Anda dapat melakukan ini:
sumber
Meskipun saya terlambat 3 tahun, tetapi untuk menyederhanakan contoh Guffa, Anda bahkan tidak perlu memiliki formulir di halaman sama sekali:
Diedit:
Mungkin tip berguna untuk seseorang :)
sumber
$("body").append(form);
ini tidak akan berhasil.remove()
setelah saran Jonathan.appendTo('body').submit()
, Anda bahkan akan membersihkannya sendiri dan tidak mengacaukan halaman saat ini dengan objek formulir.Saya sepenuhnya setuju dengan jawaban tentara bayaran yang diposting di atas dan membuat fungsi ini untuk saya yang berfungsi untuk saya. Ini bukan jawaban, ini adalah komentar di posting di atas oleh tentara bayaran
sumber
Anda cukup menggunakan
target="_blank"
formulir.Tambahkan input tersembunyi dengan cara yang Anda inginkan, lalu kirimkan formulir dengan JS.
sumber
window.open
akan diblokir sebagai munculan, ketika tidak dipanggil di dalamclick
penangan (atau peristiwa yang diaktifkan pengguna seperti itu)Saya membuat fungsi untuk menghasilkan formulir, berdasarkan url, target, dan objek sebagai metode
POST
/GET
data dan kirim. Ini mendukung tipe bersarang dan campuran dalam objek itu, sehingga dapat sepenuhnya mereplikasi struktur apa pun yang Anda beri makan: PHP secara otomatis mem-parsingnya dan mengembalikannya sebagai larik bersarang. Namun, ada satu batasan: tanda kurung[
dan]
tidak boleh menjadi bagian dari kunci apa pun di objek (seperti{"this [key] is problematic" : "hello world"}
). Jika seseorang tahu bagaimana cara menghindarinya dengan benar, tolong beritahu!Tanpa basa-basi lagi, berikut ini sumbernya:
Tampilkan cuplikan kode
Contoh penggunaan:
sumber
Saya menemukan cara yang lebih baik untuk meneruskan parameter ke jendela popup dan bahkan untuk mengambil parameter darinya:
Di halaman utama:
Di jendela popup:
Itu dia !
Dan ini sangat nyaman karena:
Selamat bersenang-senang!
sumber
window.opener
tidak didukung dari semua browser.Saya ingin melakukan ini di React menggunakan plain Js dan fetch polyfill . OP tidak mengatakan dia secara khusus ingin membuat formulir dan memanggil metode kirim di atasnya, jadi saya telah melakukannya dengan memposting nilai formulir sebagai json:
sumber
Tindakan pengiriman default adalah Ext.form.action.Submit, yang menggunakan permintaan Ajax untuk mengirimkan nilai formulir ke URL yang dikonfigurasi. Untuk mengaktifkan pengiriman browser normal dari formulir Ext, gunakan opsi konfigurasi standardSubmit.
Tautan: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit
solusi: letakkan standardSubmit: true di konfigurasi Anda. Semoga ini bisa membantu Anda :)
sumber
Saya telah menggunakan ini di masa lalu, karena kami biasanya menggunakan sintaks pisau cukur untuk pengkodean
{
// tambahkan tersembunyi dan formulir diajukan di sini
}
sumber