Отправлять данные 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>
Кажется, для меня это нормально, но, пожалуйста, скажите, если с этим что-то не так!
Спасибо всем.
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>
Вы можете использовать jQuery для публикации на странице php: http://api.jquery.com/jQuery.post/
Как насчет этого:
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');
С помощью 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
Создайте свой собственный заголовок, как таковой:
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
Используйте 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);
Вы можете отправить запрос xhr с данными, которые вы хотите опубликовать, перед перезагрузкой страницы.
И перезагрузите страницу только в том случае, если запрос xhr завершен.
Таким образом, в основном вы хотели бы выполнить синхронный запрос.