Existe-t-il de toute façon d'envoyer des données de publication à un script PHP autre que d'avoir un formulaire? (Ne pas utiliser GET bien sûr).
Je veux que javascript recharge la page après X secondes et poste des données sur la page en même temps. Je pourrais le faire avec GET mais je préfère utiliser POST, car il semble plus propre.
Merci beaucoup.
EDIT: Serait-il possible de faire avec PHP? Je suis sûr qu'il est préférable d'utiliser JQuery mais pour ma situation actuelle, je pourrais l'implémenter beaucoup plus facilement/plus rapidement:)
À votre santé
J'ai fini par le faire comme ça:
<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>
Semble bien fonctionner pour moi, mais s'il vous plaît dites s'il y a quelque chose de mal avec ça!
Merci tout le monde.
Comme demandé ci-dessus, voici comment vous pouvez ajouter dynamiquement un formulaire masqué et le soumettre lorsque vous souhaitez actualiser la page.
Quelque part dans votre HTML:
<div id="hidden_form_container" style="display:none;"></div>
Et du 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();
}
Cela équivaut à soumettre ce formulaire 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>
Vous pouvez utiliser JQuery pour publier sur une page php: http://api.jquery.com/jQuery.post/
Utilisez l'API FormData .
De l'exemple 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);
Que dis-tu de ça:
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);
}
utiliser comme ceci:
redirectWithPostData('page.aspx', {UserIDs: getMultiUserSelectedItems()},'_top');
Par 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
})
ou le plus simple:
$.post( "yourphpscript.php", data, success_callback_as_above );
plus sur http://api.jquery.com/jQuery.ajax
Créez votre propre en-tête, en tant que tel:
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
Vous pouvez envoyer une demande xhr avec les données que vous souhaitez publier avant de recharger la page.
Et rechargez la page uniquement si la demande xhr est terminée.
Donc, fondamentalement, vous voudriez faire une demande synchrone.