使用jQuery在POST之前修改POST变量

使用jQuery在POST之前修改POST变量,jquery,forms,post,Jquery,Forms,Post,我在jQuery中有一个表单和一个提交处理程序 当用户提交表单时,我想在POST请求从客户端发送到服务器之前修改(添加)一些参数 i、 e 用户单击“提交” 我的jQuery提交处理程序开始执行 我创建了一些新的键/值对,并将它们添加到POST有效负载中 目前,我唯一的选择似乎是使用$.post(),或$('form').append('input type=“hidden”name=…value=…') 谢谢你的帮助 编辑:我已经在表单中附加了一个提交处理程序;我正在尝试编辑用户单击submi

我在jQuery中有一个表单和一个提交处理程序

当用户提交表单时,我想在POST请求从客户端发送到服务器之前修改(添加)一些参数

i、 e

  • 用户单击“提交”
  • 我的jQuery提交处理程序开始执行
  • 我创建了一些新的键/值对,并将它们添加到POST有效负载中
  • 目前,我唯一的选择似乎是使用
    $.post()
    ,或
    $('form').append('input type=“hidden”name=…value=…')

    谢谢你的帮助

    编辑:我已经在表单中附加了一个提交处理程序;我正在尝试编辑用户单击submit按钮和发送到服务器的请求之间的post变量。

    将submit()处理程序附加到表单

    $('form#myForm').submit(myPostHandlingFunction);
    

    然后从你的功能中提交/完成帖子。最简单的方法是在表单中填充两个隐藏的输入,然后返回true,以便在一切正常的情况下进行提交。

    您可以钩住submit按钮的click事件并在那里进行处理。 对于键/值对,您可以尝试使用隐藏的表单元素。

    使用表单上的
    submit()
    函数创建回调。如果函数返回true,则提交表单;如果为false,则该表单将不会发布

    $('#theForm').submit(function() {
        $("#field1").val(newValue1);
        $("#field2").val(newValue2);
        $(this).append(newFormField);
        return true;
    });

    等等。

    我不认为你可以这样修改POST变量。当提交处理程序运行时,并没有可以添加或修改的真正存在的表单数据散列。
    我认为你是对的-你唯一的选择是自己使用$.post()(我推荐)或将隐藏的输入附加到表单中(有你并不真正需要的DOM修改开销)。

    我已经研究这个问题一天了,我想出了一个很好的解决方案:

    可以使用Jquery.clone()创建要提交的表单的副本。
    然后您可以对副本进行修改,最后提交副本。

    高级视图:
    当表单以本机方式提交时,它是浏览器执行的最后一个操作,并且在呈现引擎/javascript解释器的范围之外执行。

    任何通过JavaScript截获实际POST或GET请求的尝试都是不可能的,因为这种传统的web请求只发生在浏览器引擎和网络子系统之间

    现代解决方案:
    web开发人员使用XMLHttpRequest提交表单数据变得越来越流行,XMLHttpRequest是一种允许JavaScript intepreter访问浏览器网络子系统的web浏览器API
    这通常被称为Ajax

    这种方法的一个简单但常见的用法如下:

    /**
    *职能部门负责收集表单输入数据,
    *向列表中添加其他值,并将其发布到
    *服务器通过Ajax。
    */
    函数processForm(){
    //从表单中检索数据:
    var data=$('#myForm').serializeArray();
    //将其他数据添加到原始表单数据中:
    数据推送({
    姓名:'年龄',
    价值:25
    }, {
    姓名:'性别',
    值:“M”
    }, {
    名称:'重量',
    价值:200
    });
    //通过Ajax POST请求提交表单:
    $.ajax({
    键入:“POST”,
    url:'myFormProcessor.php',
    数据:数据,
    数据类型:“json”
    }).完成(功能(数据){
    //下面的代码是异步执行的,
    //也就是说,直到
    //Ajax请求已完成,响应已加载。
    //这段代码可能,也可能会,在任何
    //这是在它之外定义的。
    提醒(“感谢您的提交!”);
    log(“响应数据”+数据);//将服务器响应记录到控制台
    });
    警报(“此警报是第一次出现还是第二次出现?”);
    }
    
    
    我必须创建大量输入。我的问题是:我是否使用$.post('url',myData);返回false;或$('form').append('lost of new hidden input');返回true;?还是有更好的办法?我希望有更好的方法。如果你有大量的额外数据要传递,我想你应该使用$.post。您可以调用$('form#myForm)。序列化以获取初始数据字典,然后附加到该字典,然后发布数据并重定向用户(如果成功)。但是,如果要传递大量的额外数据,为什么?如果不是用户输入,为什么不在后端计算,而不是依赖JavaScript?谢谢您的输入。我已经在使用$('form').submit(fnuction(){…});我正在尝试确定修改POST变量的最佳方法。听起来这是最好的选择。虽然我必须动态地创建很多隐藏的输入,比如说atributos serán reseteados,volverán a la normalidad después del POST。
    $("#frm").submit(function (e) {
        e.preventDefault();
        form = document.getElementById("frm"); //$("#frm")
    
        $.each(form.elements, function (i, el) {
            el.name = your_new_name;
            el.value = your_new_value;
            //... //el.type, el.id ...
        });
    
        form.submit();
    
        return true;
    });
    
    $('#myForm').submit(function() {
      $.each(this, function (i, element) {
        console.log("element name " + element.name + ", element val: " + element.value);
        if(element.name="thisThingInParticular")
          element.value = "myNewValueForThisElementInParticular";
        )
    
      }
    });