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