2009-06-14 2 views
54

Я эту простую форму:Добавление параметров POST, прежде чем отправить

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

без изменения формы, пожалуйста.

+8

Просто примечание стороны: Полагаться на пользователе поставить правильное время и URL может привести к проблемы. – merkuro

ответ

87

Чтобы добавить, что с помощью 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; 
}); 
+13

Thats, изменяющий форму – Hontoni

+0

@Hontoni Мы можем проверить, существует ли элемент параметра в форме до того, как мы добавим его в форму, которая может добавить элемент параметра только один раз. – guogangj

+0

Вы можете использовать 'myInput = document.createElement ('input')', а затем установить атрибуты как объект, например: 'myInput.type = 'text'; myInput.name = 'name'' –

18

Предыдущий ответ может быть укороченный и быть более читаемым.

$('#commentForm').submit(function() { 
    $(this).append($.map(params, function (param) { 
     return $('<input>', { 
      type: 'hidden', 
      name: param.name, 
      value: param.value 
     }) 
    })) 
}); 
2

Вы можете сделать form.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") 
    } 
}); 
6

Если вы хотите добавить параметры без изменения формы, вы должны сериализовать форму , добавить свои параметры и отправить его с помощью 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() документации.

0

PURE 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 функцию для отправки информации с помощью POST:

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

Вы можете сделать вызов ajax.

Таким образом, вы могли бы заполнить массив POST самостоятельно через Аякс «данные:» параметр

var params = { 
    url: window.location.pathname, 
    time: new Date().getTime(), 
}; 


$.ajax({ 
    method: "POST", 
    url: "your/script.php", 
    data: params 
}); 
+0

Вы должны показать пример. Вы можете использовать встроенные фрагменты SO, чтобы сделать это легко – Mawcel

Смежные вопросы