2011-12-26 18 views
12

Esiste comunque l'invio di dati di post su uno script php oltre alla presenza di un modulo? (Non usando GET ovviamente).Invia dati POST a PHP senza utilizzare un modulo HTML?

Desidero javascript per ricaricare la pagina dopo X secondi e caricare alcuni dati nella pagina allo stesso tempo. Potrei farlo con GET ma preferirei usare POST, visto che sembra più pulito.

Grazie mille.

EDIT: Potrebbe essere possibile utilizzare l'intestazione PHP? Sono sicuro che è meglio utilizzare JQuery, ma per la mia situazione attuale ho potuto attuare tale molto più facile/più veloce:)

Acclamazioni

ho finito per fare in questo 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> 

Sembra funzionare bene per me, ma per favore dimmi se c'è qualcosa di sbagliato in questo!

Grazie a tutti.

+0

Si potrebbe, se si vuole evitare tramite il modulo AJAX, hanno nascosto, o crearne uno in modo dinamico, e basta inviare il modulo utilizzando Javascript dopo un timeout. AJAX può essere la soluzione migliore, dipende esattamente da ciò che si vuole fare e AJAX offre probabilmente maggiori possibilità di gestire gli errori con garbo. – DaveRandom

+0

Ah sì, questo è possibile per me, sono sicuro che gli altri suggerimenti sono complessivamente migliori, ma questo è un piccolo progetto e questa soluzione suona come si adatta al mio stile di codifica :) –

+0

Vedere la mia risposta qui sotto per i dettagli di come questo può essere fatto in Javascript senza framework. – DaveRandom

risposta

18

Come richiesto in precedenza, qui è come è possibile aggiungere dinamicamente un modulo nascosto e inviarlo quando si desidera aggiornare la pagina.

Da qualche parte nel codice HTML:

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

E alcuni 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(); 
} 

Ciò equivale a Inviando questo form 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

Ho postato quello che ho usato nella domanda finale/OP (Non sono sicuro di come lo chiamate qui) –

5

È possibile utilizzare jQuery per inviare ad una pagina php: http://api.jquery.com/jQuery.post/

+0

Sembra che ho bisogno di imparare Ajax e JQuery per avanzare ... Un sacco di quello che ho cercato di fare sembra che possa essere fatto più facile con loro. Comunque non ho mai toccato neanche così a breve termine non posso davvero usarlo (finché non avrò informazioni su JQuery). Molte grazie. –

1

È possibile inviare una richiesta XHR con i dati che si desidera inviare prima di ricaricare la pagina.

E ricaricare la pagina solo se la richiesta xhr è terminata.

Quindi in pratica si vorrebbe fare una richiesta sincrona.

2

Con 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 semplice:

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

più http://api.jquery.com/jQuery.ajax

2

formare la propria intestazione, come ad esempio:

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

ne dite di questo:

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 in questo modo:

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

Utilizzare la FormData API.

Dall'esempio lì:

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);