web-dev-qa-db-fra.com

Envoyer des données POST à PHP sans utiliser de formulaire HTML?

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.

14
bag-man

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>
20
DaveRandom

Vous pouvez utiliser JQuery pour publier sur une page php: http://api.jquery.com/jQuery.post/

5
box86rowh

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

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');
3
user2749894

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

2
abuduba

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
2
tacos_tacos_tacos

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.

1
PeeHaa