Добавление параметров записи перед отправкой
у меня есть такая простая форма:
<form id="commentForm" method="POST" action="api/comment">
<input type="text" name="name" title="Your name"/>
<textarea cols="40" rows="10" name="comment" title="Enter a comment">
</textarea>
<input type="submit" value="Post"/>
<input type="reset" value="Reset"/>
</form>
мне нужно добавить два параметра POST перед отправкой на сервер:
var params = [
{
name: "url",
value: window.location.pathname
},
{
name: "time",
value: new Date().getTime()
}
];
без изменения, пожалуйста, форму.
6 ответов:
чтобы добавить это с помощью Jquery:
$('#commentForm').submit(function(){ //listen for submit event $.each(params, function(i,param){ $('<input />').attr('type', 'hidden') .attr('name', param.name) .attr('value', param.value) .appendTo('#commentForm'); }); return true; });
предыдущий ответ может быть укороченная и больше читабельный.
$('#commentForm').submit(function () { $(this).append($.map(params, function (param) { return $('<input>', { type: 'hidden', name: param.name, value: param.value }) })) });
Если вы хотите добавить параметры без изменения формы, вы должны сериализовать форму, добавить свои параметры и отправить его с помощью AJAX:
var formData = $("#commentForm").serializeArray(); formData.push({name: "url", value: window.location.pathname}); formData.push({name: "time", value: new Date().getTime()}); $.post("api/comment", formData, function(data) { // request has finished, check for errors // and then for example redirect to another page });посмотреть
.serializeArray()и$.post()документация.
вы можете сделать форму.serializeArray (), затем добавьте пары имя-значение перед публикацией:
var form = $(this).closest('form'); form = form.serializeArray(); form = form.concat([ {name: "customer_id", value: window.username}, {name: "post_action", value: "Update Information"} ]); $.post('/change-user-details', form, function(d) { if (d.error) { alert("There was a problem updating your user details") } });
чистый JavaScript:
создание XMLHttpRequest:
function getHTTPObject() { /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por lo que se puede copiar tal como esta aqui */ var xmlhttp = false; /* No mas soporte para Internet Explorer try { // Creacion del objeto AJAX para navegadores no IE xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(nIE) { try { // Creacion del objet AJAX para IE xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(IE) { if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp = new XMLHttpRequest(); } } */ xmlhttp = new XMLHttpRequest(); return xmlhttp; }функция JavaScript для отправки информации по почте:
function sendInfo() { var URL = "somepage.html"; //depends on you var Params = encodeURI("var1="+val1+"var2="+val2+"var3="+val3); console.log(Params); var ajax = getHTTPObject(); ajax.open("POST", URL, true); //True:Sync - False:ASync ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); ajax.setRequestHeader("Content-length", Params.length); ajax.setRequestHeader("Connection", "close"); ajax.onreadystatechange = function() { if (ajax.readyState == 4 && ajax.status == 200) { alert(ajax.responseText); } } ajax.send(Params); }
вы можете сделать вызов ajax.
таким образом, Вы сможете заполнить массив POST самостоятельно через ajax 'data:' parameter
var params = { url: window.location.pathname, time: new Date().getTime(), }; $.ajax({ method: "POST", url: "your/script.php", data: params });
Comments