Con el método window.open abro un nuevo sitio con parámetros, que tengo que pasar por método de publicación. Encontré una solución, pero desafortunadamente no funciona. Este es mi codigo:
<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>
A continuación, creo matrices:
<script type="text/javascript">
var values= new Array("value1", "value2", "value3")
var keys= new Array("a","b","c")
</script>
Y llamar a la función por:
<input id="Button1" type="button" value="Pass values" onclick="openWindowWithPost('test.asp','',keys,values)" />
Pero, cuando hago clic en este botón, el sitio test.asp está vacío (por supuesto, intento obtener valores de paso - Request.Form("b")
).
¿Cómo podría resolver este problema, por qué no puedo obtener valores de paso?
javascript
luk4443
fuente
fuente
Respuestas:
En lugar de escribir un formulario en la nueva ventana (que es complicado de corregir, con la codificación de valores en el código HTML), simplemente abra una ventana vacía y publique un formulario en ella.
Ejemplo:
Editar:
Para establecer los valores en el formulario de forma dinámica, puede hacer lo siguiente:
Para publicar el formulario, llama a la función con los valores, como
openWindowWithPost('a','b','c');
.Nota: Varié los nombres de los parámetros en relación con los nombres de los formularios para mostrar que no tienen que ser iguales. Por lo general, los mantendría similares entre sí para facilitar el seguimiento de los valores.
fuente
action
propiedad del formulario.target="_blank"
?_blank
.Como quería todo el formulario dentro del javascript, en lugar de escribirlo en etiquetas, puede hacer esto:
fuente
Aunque llego 3 años tarde, pero para simplificar el ejemplo de Guffa, ni siquiera necesitas tener el formulario en la página:
Editado:
Quizás un consejo útil para alguien :)
fuente
$("body").append(form);
no funcionará.remove()
después de lo sugerido por Jonathan.appendTo('body').submit()
, incluso limpiará después de usted mismo y no abarrotará la página actual con objetos de formulario.Estoy completamente de acuerdo con la respuesta de mercenario publicada anteriormente y creé esta función para mí que funciona para mí. No es una respuesta, es un comentario en la publicación anterior de un mercenario.
fuente
Simplemente puede usar
target="_blank"
en el formulario.Agregue entradas ocultas de la manera que prefiera y luego simplemente envíe el formulario con JS.
fuente
window.open
que se bloquearía como una ventana emergente, cuando no se llama dentro de unclick
controlador (o cualquier evento disparado por el usuario como ese)Creé una función para generar un formulario, basado en la URL, el destino y un objeto como el método
POST
/GET
data y submit. Admite tipos anidados y mixtos dentro de ese objeto, por lo que puede replicar completamente cualquier estructura que lo alimente: PHP lo analiza automáticamente y lo devuelve como una matriz anidada. Sin embargo, hay una única restricción: los corchetes[
y]
no deben ser parte de ninguna clave en el objeto (como{"this [key] is problematic" : "hello world"}
). Si alguien sabe cómo escapar correctamente, ¡dígalo!Sin más preámbulos, aquí está la fuente:
Mostrar fragmento de código
Ejemplo de uso:
fuente
Encontré una mejor manera de pasar parámetros a la ventana emergente e incluso recuperar parámetros de ella:
En la pagina principal:
En la ventana emergente:
Eso es !
Y esto es muy conveniente porque:
¡Que te diviertas!
fuente
window.opener
no es compatible con todos los navegadores.Quería hacer esto en React usando Js simples y fetch polyfill . OP no dijo que quería específicamente crear un formulario e invocar el método de envío en él, así que lo hice publicando los valores del formulario como json:
fuente
La acción de envío predeterminada es Ext.form.action.Submit, que utiliza una solicitud Ajax para enviar los valores del formulario a una URL configurada. Para habilitar el envío normal del navegador de un formulario externo, use la opción de configuración estándar de envío.
Enlace: http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic-cfg-standardSubmit
solución: ponga standardSubmit: true en su configuración. Espero que esto te ayude :)
fuente
He usado esto en el pasado, ya que normalmente usamos la sintaxis razor para codificar
{
// agregar formulario oculto y archivado aquí
}
fuente