2011-12-26 85 views
12

¿Hay alguna forma de enviar datos de publicaciones a un script php que no sea un formulario? (No usando GET por supuesto).¿Enviar datos POST a PHP sin usar un formulario HTML?

Quiero javascript para volver a cargar la página después de X segundos y publicar algunos datos en la página al mismo tiempo. Podría hacerlo con GET pero preferiría usar POST, ya que se ve más limpio.

Muchas gracias.

EDITAR: ¿Sería posible hacer con el encabezado de PHP? Estoy seguro de que es mejor usar jQuery pero para mi situación actual que pude poner en práctica esa mucho más fácil/más rápido:)

Saludos

acabé haciéndolo de este modo:

<script> 
    function mySubmit() { 
    var form = document.forms.myForm; 
    form.submit(); 
    } 
</script> 

... 

<body onLoad="mySubmit()";> 
    <form action="script.php?GET_Value=<?php echo $GET_var ?>" name="myForm" method="post"> 
    <input type="hidden" name="POST_Value" value="<?php echo $POST_Var ?>"> 
    </form> 
</body> 

Parece que funciona bien para mí, pero dime si hay algo mal con eso.

Gracias a todos.

+0

Usted puede, si se quiere evitar el uso de formulario AJAX, han ocultado, o crear una forma dinámica, y acaba de enviar el formulario usando Javascript después de un tiempo de espera. AJAX puede ser la mejor solución, depende exactamente de lo que quiera hacer, y posiblemente AJAX le brinde más margen para manejar los errores con elegancia. – DaveRandom

+0

Ah sí, eso me parece posible, estoy seguro de que las otras sugerencias son mejores en general, pero este es un proyecto pequeño y esta solución parece que se adapta a mi estilo de codificación :) –

+0

Consulte mi respuesta a continuación para obtener detalles sobre cómo esto puede ser hecho en Javascript sin marco. – DaveRandom

Respuesta

18

lo solicitado anteriormente, aquí está cómo podría agregar dinámicamente un formulario oculto y enviarlo cuando desee actualizar la página.

En algún lugar de su HTML:

<div id="hidden_form_container" style="display:none;"></div> 

Y algo de JavaScript:

function postRefreshPage() { 
    var theForm, newInput1, newInput2; 
    // Start by creating a <form> 
    theForm = document.createElement('form'); 
    theForm.action = 'somepage.php'; 
    theForm.method = 'post'; 
    // Next create the <input>s in the form and give them names and values 
    newInput1 = document.createElement('input'); 
    newInput1.type = 'hidden'; 
    newInput1.name = 'input_1'; 
    newInput1.value = 'value 1'; 
    newInput2 = document.createElement('input'); 
    newInput2.type = 'hidden'; 
    newInput2.name = 'input_2'; 
    newInput2.value = 'value 2'; 
    // Now put everything together... 
    theForm.appendChild(newInput1); 
    theForm.appendChild(newInput2); 
    // ...and it to the DOM... 
    document.getElementById('hidden_form_container').appendChild(theForm); 
    // ...and submit it 
    theForm.submit(); 
} 

Esto es equivalente a enviar este formulario HTML:

<form action="somepage.php" method="post"> 
    <input type="hidden" name="input_1" value="value 1" /> 
    <input type="hidden" name="input_2" value="value 2" /> 
</form> 
+0

Publiqué lo que utilicé en la pregunta final/OP (No estoy seguro de cómo lo llama aquí) –

5

Puede utilizar jQuery para publicar en una página php: http://api.jquery.com/jQuery.post/

+0

Parece que necesito aprender Ajax y JQuery para avanzar ... Mucho de lo que he estado tratando de hacer parece que se puede hacer más fácilmente con ellos. Sin embargo, nunca he tocado, así que a corto plazo no puedo usarlo realmente (hasta que sepa sobre JQuery). Muchas gracias. –

1

Puede enviar una solicitud xhr con los datos que desea publicar antes de volver a cargar la página.

Y vuelva a cargar la página solo si la solicitud xhr ha finalizado.

Así que, básicamente, querría hacer una solicitud sincrónica.

2

Por jQuery:

$.ajax({ 
    url: "yourphpscript.php", 
    type: "post", 
    data: json/array/whatever, 

    success: function(){ // trigger when request was successfull 
    window.location.href = 'somewhere' 
    }, 
    error: anyFunction // when error happened 
    complete: otherFunction // when request is completed -no matter if the error or not 
    // callbacks are of course not mandatory 
}) 

o más simple:

$.post("yourphpscript.php", data, success_callback_as_above); 

más en http://api.jquery.com/jQuery.ajax

2

Forme su propia cabecera, como tal:

POST /submit.php HTTP/1.1 
Host: localhost 
User-Agent: Mozilla/4.0 
Content-Length: 27 
Content-Type: application/x-www-form-urlencoded 

userId=admin&password=letmein 
3

¿Qué tal esto:

function redirectWithPostData(strLocation, objData, strTarget) 
{ 
    var objForm = document.createElement('FORM'); 
    objForm.method = 'post'; 
    objForm.action = strLocation; 

    if (strTarget) 
     objForm.target = strTarget; 

    var strKey; 
    for (strKey in objData) 
    { 
     var objInput = document.createElement('INPUT'); 
     objInput.type = 'hidden'; 
     objInput.name = strKey; 
     objInput.value = objData[strKey]; 
     objForm.appendChild(objInput); 
    } 

    document.body.appendChild(objForm); 
    objForm.submit(); 

    if (strTarget) 
     document.body.removeChild(objForm); 
} 

uso como esto:

redirectWithPostData('page.aspx', {UserIDs: getMultiUserSelectedItems()},'_top'); 
0

utilizar la API FormData.

A partir del ejemplo que hay:

var formData = new FormData(); 
formData.append("username", "Groucho"); 
formData.append("accountnum", 123456); 

var request = new XMLHttpRequest(); 
request.open("POST", "http://foo.com/submitform.php"); 
request.send(formData); 
Cuestiones relacionadas