2012-03-27 37 views
14

Eventuali duplicati:
JavaScript post request like a form submitPasso Variabile Javascript per PHP POST

ho un valore calcolato in JS che mi piacerebbe passare come parte di un modulo di ingresso a un PHP script. Come posso ottenere un valore JS per il PHP come parametro POST?

Fondamentalmente, su submit, ho bisogno che la variabile total venga passata per posta allo script successivo.

La prima idea che viene in mente è creare una forma di input invisibile che abbia il valore e sia immessa nella forma, è possibile?

+0

vedere questo: http: //stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit –

risposta

13

Sì, è possibile utilizzare uno <input type="hidden" /> e impostare il valore di tale campo nascosto nel codice javascript in modo che venga pubblicato con gli altri dati del modulo.

+3

Accertati solo di che la casella di testo nascosta si trova all'interno di un tag form. – javram

3

L'idea di un elemento di forma nascosta è solida. Qualcosa di simile

<form action="script.php" method="post"> 
<input type="hidden" name="total" id="total"> 
</form> 

<script type="text/javascript"> 
var element = document.getElementById("total"); 
element.value = getTotalFromSomewhere; 
element.form.submit(); 
</script> 

Naturalmente, questo cambierà la posizione per script.php. Se vuoi farlo invisibilmente all'utente, ti consigliamo di usare AJAX. Ecco un esempio di jQuery (per brevità). Nessuna forma o input nascosti richiesti

$.post("script.php", { total: getTotalFromSomewhere }); 
+0

la variabile sarà accessibile da '$ _POST ['elemento']' o da '$ _POST ['getTotalFromSomewhere']'? – Oliver

+1

@Oliver la chiave dati è "totale" quindi '$ _POST ['totale']' – Phil

7

È possibile farlo utilizzando Ajax. Ho una funzione che uso per qualcosa del genere:

function ajax(elementID,filename,str,post) 
{ 
    var ajax; 
    if (window.XMLHttpRequest) 
    { 
     ajax=new XMLHttpRequest();//IE7+, Firefox, Chrome, Opera, Safari 
    } 
    else if (ActiveXObject("Microsoft.XMLHTTP")) 
    { 
     ajax=new ActiveXObject("Microsoft.XMLHTTP");//IE6/5 
    } 
    else if (ActiveXObject("Msxml2.XMLHTTP")) 
    { 
     ajax=new ActiveXObject("Msxml2.XMLHTTP");//other 
    } 
    else 
    { 
     alert("Error: Your browser does not support AJAX."); 
     return false; 
    } 
    ajax.onreadystatechange=function() 
    { 
     if (ajax.readyState==4&&ajax.status==200) 
     { 
      document.getElementById(elementID).innerHTML=ajax.responseText; 
     } 
    } 
    if (post==false) 
    { 
     ajax.open("GET",filename+str,true); 
     ajax.send(null); 
    } 
    else 
    { 
     ajax.open("POST",filename,true); 
     ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
     ajax.send(str); 
    } 
    return ajax; 
} 

Il primo parametro è l'elemento che si desidera modificare. Il secondo parametro è il nome del nome del file che stai caricando nell'elemento che stai modificando. Il terzo parametro sono i dati GET o POST che stai utilizzando, quindi ad esempio "total = 10000 & othernumber = 999". L'ultimo parametro è true se vuoi usare POST o false se vuoi GET.

12

Ci sono molti modi per raggiungere questo obiettivo. Riguardo al modo in cui stai chiedendo, con un elemento di forma nascosta.

creare questo elemento di modulo all'interno del modulo:

<input type="hidden" name="total" value=""> 

Così il vostro modulo come questo:

<form id="sampleForm" name="sampleForm" method="post" action="phpscript.php"> 
<input type="hidden" name="total" id="total" value=""> 
<a href="#" onclick="setValue();">Click to submit</a> 
</form> 

Allora il tuo javascript qualcosa di simile:

<script> 
function setValue(){ 
    document.sampleForm.total.value = 100; 
    document.forms["sampleForm"].submit(); 
} 
</script> 
Problemi correlati