2010-03-03 48 views
89

Al usar window.location.href, me gustaría pasar los datos POST a la nueva página que abro. ¿Es esto posible usando JavaScript y jQuery?datos de entrada de pase con window.location.href

+7

Configuración 'window.location.href' hace una solicitud GET para la nueva URL, no POST. –

Respuesta

64

Al utilizar window.location.href no es posible enviar una solicitud POST.

Lo que tienes que hacer es configurar una etiqueta form con campos de datos en el mismo, establece el atributo action de la forma de la URL y el atributo method a POST, a continuación, llamar al método submit en la etiqueta form.

+0

Tengo datos provenientes de 3 formularios diferentes y estoy tratando de enviar los 3 formularios a la misma página, así que he estado tratando de serializar los formularios con jQuery y enviarlos de otra manera – Brian

+0

@Brian: ¿No puede poner simplemente todo en una 'forma', ¿entonces todo se envía automáticamente? –

+0

Un formulario está en un cuadro de diálogo jQueryUI, así que no puedo simplemente incluirlos a todos. – Brian

60

Agregar un formulario a su HTML, algo como esto:

<form style="display: hidden" action="/the/url" method="POST" id="form"> 
    <input type="hidden" id="var1" name="var1" value=""/> 
    <input type="hidden" id="var2" name="var2" value=""/> 
</form> 

y utilizar jQuery para llenar estos valores (por supuesto también se puede usar javascript para hacer algo similar)

$("#var1").val(value1); 
$("#var2").val(value2); 

Entonces finalmente envíe el formulario

$("#form").submit(); 

en el lado del servidor que debería poder obtener el dat una enviada al marcar var1 y var2, la forma de hacerlo dependerá del idioma del lado del servidor que esté utilizando.

7

Respuesta corta: no. window.location.href no es capaz de pasar datos POST.

Una respuesta algo más satisfactoria: puede utilizar esta función para clonar todos los datos de su formulario y enviarlo.

var submitMe = document.createElement("form"); 
submitMe.action = "YOUR_URL_HERE"; // Remember to change me 
submitMe.method = "post"; 
submitMe.enctype = "multipart/form-data"; 
var nameJoiner = "_"; 
//^The string used to join form name and input name 
// so that you can differentiate between forms when 
// processing the data server-side. 
submitMe.importFields = function(form){ 
    for(k in form.elements){ 
     if(input = form.elements[k]){ 
      if(input.type!="submit"&& 
        (input.nodeName=="INPUT" 
        ||input.nodeName=="TEXTAREA" 
        ||input.nodeName=="BUTTON" 
        ||input.nodeName=="SELECT") 
        ){ 
       var output = input.cloneNode(true); 
       output.name = form.name + nameJoiner + input.name; 
       this.appendChild(output); 
      } 
     } 
    } 
} 
  • Haz submitMe.importFields(form_element); para cada una de las tres formas que desea enviar.
  • Esta función se añada el nombre de cada forma de los nombres de sus entradas de niño (si usted tiene una <input name="email"> en <form name="login">, el nombre presentado será login_name.
  • Puede cambiar la variable nameJoiner a algo distinto de _ por lo que doesn 't conflicto con su esquema de nombres de entrada.
  • Una vez que haya importado todos los formularios necesarios, hacer submitMe.submit();
-5

puede utilizar GET en lugar de pase, pero no use este método para valores importantes,

function passIDto(IDval){  
window.location.href = "CustomerBasket.php?oridd=" + IDval ; 
} 

En el CustomerBasket.php

<?php 
    $value = $_GET["oridd"]; 
    echo $value; 
?> 
+3

su método GET pero la pregunta es POST method buddy – Thamaraiselvam

+0

@thamaraiselvam Kissa Mia puede no haber expresado bien la respuesta, pero tiene razón sobre la ruta GET aquí. La pregunta no está integrada en el método POST: el usuario solo preguntó si había una forma de tomar * datos POST * y enviarlos a través de window.location.href. Y primero debe saber que Window.location.href ** IS ** es una solicitud GET. Esta respuesta no es incorrecta: simplemente no será fácil escalar a una gran cantidad de campos de formulario, codificados como QueryString. Sin embargo, la forma más obvia de enviar datos a través de una URL (que es lo que puede cambiar con window.location.href) es a través de los parámetros de cadena de consulta. – SylonZero

+0

@SylonZero No puede adjuntar datos POST a una solicitud GET. Son diferentes tipos de solicitudes y los datos se ven diferentes en un POST. Las partes importantes de la especificación HTTP son bastante cortas. –

2

usan este archivo: "jquery.redirect.js"

$("#btn_id").click(function(){ 
    $.redirect(http://localhost/test/test1.php, 
     { 
      user_name: "khan", 
      city : "Meerut", 
      country : "country" 
     }); 
    }); 
}); 

ver https://github.com/mgalante/jquery.redirect

2

es tan simple como esto
$.post("som_page.php", { data1: value1 , data2: value2 .... }).done(function(data) { $("body").html(data);});
Tuve que resolver esto para hacer un bloqueo de pantalla de mi aplicación donde tuve que pasar datos confidenciales como usuario y la url donde estaba trabajando.A continuación, cree una función que ejecute este código

+0

O en la función 'done()' establecida 'window.location.href' –

+0

Sí @ChrisEdwards, en mi ejemplo trato de usar los datos de retorno de jquery post. Espero que sea útil para alguien. –

Cuestiones relacionadas