Отправлять данные POST на PHP без использования HTML-формы?


Можно ли в любом случае отправлять данные post в php-скрипт, кроме как с формой? (Не используя GET, конечно).

Я хочу, чтобы javascript перезагрузил страницу через X секунд и одновременно разместил некоторые данные на странице. Я мог бы сделать это с помощью GET, но я бы предпочел использовать POST, так как он выглядит чище.

Большое спасибо.

ИЗМЕНИТЬ: Можно ли было бы сделать это с заголовком PHP? Я уверен, что лучше использовать jQuery, но для моей текущей ситуации я мог бы реализовать это намного проще/быстрее : )

Приветствия

В итоге я сделал это так:

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

Кажется, для меня это нормально, но, пожалуйста, скажите, если с этим что-то не так!

Спасибо всем.

Author: bag-man, 2011-12-27

7 answers

Как указано выше, вот как вы можете динамически добавлять скрытую форму и отправлять ее, когда захотите обновить страницу.

Где-то в вашем HTML:

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

И некоторые 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();
}

Это эквивалентно отправке этой 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>
 18
Author: DaveRandom, 2011-12-26 21:43:47

Вы можете использовать jQuery для публикации на странице php: http://api.jquery.com/jQuery.post/

 5
Author: box86rowh, 2011-12-26 20:43:59

Как насчет этого:

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

Используйте вот так:

redirectWithPostData('page.aspx', {UserIDs: getMultiUserSelectedItems()},'_top');
 3
Author: user2749894, 2015-08-12 01:49:39

С помощью 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
})

Или проще всего:

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

Подробнее о http://api.jquery.com/jQuery.ajax

 2
Author: abuduba, 2011-12-26 20:48:16

Создайте свой собственный заголовок, как таковой:

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
Author: tacos_tacos_tacos, 2011-12-26 20:50:37

Используйте API FormData .

Из приведенного здесь примера:

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);
 2
Author: nafg, 2017-01-22 05:31:32

Вы можете отправить запрос xhr с данными, которые вы хотите опубликовать, перед перезагрузкой страницы.

И перезагрузите страницу только в том случае, если запрос xhr завершен.

Таким образом, в основном вы хотели бы выполнить синхронный запрос.

 1
Author: PeeHaa, 2011-12-26 20:47:24