2009-06-14 4 views
54

J'ai cette forme simple:Ajout de paramètres POST soumettre avant

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

Je dois ajouter deux paramètres POST envoyer avant au serveur:

var params = [ 
       { 
       name: "url", 
       value: window.location.pathname 
       }, 
       { 
        name: "time", 
        value: new Date().getTime() 
       } 
      ]; 

sans modifier la forme, s'il vous plaît.

+8

Juste une remarque: En se fondant sur l'utilisateur pour fournir un temps valide et url pourrait conduire à problèmes. – merkuro

Répondre

87

Pour ajouter que l'utilisation 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

Cest en modifiant le formulaire – Hontoni

+0

@Hontoni Nous pouvons vérifier si l'élément de paramètre existe dans le formulaire avant de l'ajouter au formulaire, ce qui peut faire que l'élément de paramètre ne soit ajouté qu'une seule fois. – guogangj

+0

Vous pouvez utiliser 'myInput = document.createElement ('input')', puis définir les attributs en tant qu'objet, comme ceci: 'myInput.type = 'text'; myInput.name = 'name'' –

18

Réponse précédente peut être raccourci et être plus lisible .

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

Vous pouvez faire un form.serializeArray(), puis ajouter des paires nom-valeur avant de poster:

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

Si vous souhaitez ajouter des paramètres sans modifier la forme, vous devez sérialiser la forme , ajoutez vos paramètres et l'envoyer avec 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 
}); 

Voir la documentation .serializeArray() et $.post().

0

JavaScript PURE:

Création du 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; 
} 
fonction

JavaScript pour envoyer les informations via 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

Vous pouvez effectuer un appel ajax.

De cette façon, vous seriez en mesure de remplir le tableau POST-vous par la ajax « data: » paramètre

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


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

Vous devriez montrer un exemple. Vous pouvez utiliser les snippets intégrés de SO pour le faire facilement – Mawcel

Questions connexes