代码之家  ›  专栏  ›  技术社区  ›  dfa

提交前添加POST参数

  •  59
  • dfa  · 技术社区  · 16 年前

    我有一个简单的表格:

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

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

    请不要修改表格。

    6 回复  |  直到 16 年前
        1
  •  97
  •   dfa    16 年前

    要使用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;
    }); 
    
        2
  •  27
  •   Luca C.    6 年前

        var form=document.getElementById('form-id');//retrieve the form as a DOM element
    
        var input = document.createElement('input');//prepare a new input DOM element
        input.setAttribute('name', inputName);//set the param name
        input.setAttribute('value', inputValue);//set the value
        input.setAttribute('type', inputType)//set the type, like "hidden" or other
    
        form.appendChild(input);//append the input to the form
    
        form.submit();//send with added input
    
        3
  •  25
  •   sonnenhaft    8 年前

    前面的答案可以是 缩短

    $('#commentForm').submit(function () {
        $(this).append($.map(params, function (param) {
            return   $('<input>', {
                type: 'hidden',
                name: param.name,
                value: param.value
            })
        }))
    });
    
        4
  •  18
  •   Michał Perłakowski    10 年前

    如果希望在不修改表单的情况下添加参数,则必须序列化表单,添加参数并使用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() 文档

        5
  •  2
  •   Jeff Lowery    10 年前

    您可以执行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
  •  0
  •   Diego Fernando Villarroel Diaz    10 年前

    纯JavaScript:

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

    通过POST发送信息的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);
    }
    
        7
  •  -1
  •   Beefjeff    9 年前

    您可以进行ajax调用。

    这样,您就可以通过ajax“data:”参数自己填充POST数组

    var params = {
      url: window.location.pathname,
      time: new Date().getTime(), 
    };
    
    
    $.ajax({
      method: "POST",
      url: "your/script.php",
      data: params
    });