如何将数据附加到Rails中的jquery-ujs post请求?

我有一个带有data-remote="true"属性的Ajax表单,我将其提交给rails中的控制器。

我想要做的是使用jquery-ujs 事件系统在请求发送到服务器之前将数据附加到请求。

像这样的东西:

 $("#my_form").bind('ajax:beforeSend', function(xhr, settings){ // serialize some object and append it }); 

我无法弄清楚如何实际标记数据?

编辑这是’xhr’对象在控制台中的样子。

 f.Event currentTarget: DOMWindow data: undefined exclusive: undefined handleObj: Object handler: function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;jc)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}} jQuery16103879226385615766: true liveFired: HTMLDocument namespace: "" namespace_re: /(^|\.)(\.|$)/ result: undefined target: HTMLFormElement timeStamp: 1306788242911 type: "ajax:beforeSend" __proto__: Object 

我最终想到了这个。 看来,尽管文档说的是, ajax:beforeSend钩子实际上需要三个参数。 根据这篇有用的博客文章,他们是eventxhr和该顺序的settings

我正在寻找的表单数据位于settings参数的data属性中。

基本上,我现在可以使用该函数向请求添加数据

 $("#my_form").bind('ajax:beforeSend', function(event, xhr, settings){ settings.data += "&serialized=data"; }); 

额外的参数将在服务器上提供。

从jQuery 1.5开始,有一个本地的beforeSend回调可以绑定到你的请求。 文档链接和其他文档链接

编辑:请求数据在jqXHR对象中可用,第一个参数是beforeSend回调。

 beforeSend(jqXHR, settings) 

尝试检查firebug中的jqXHR对象,以查看它存储POST数据的确切位置,并只是追加您的值,

要在beforeSend方法(Jquery本机方法)中更改data属性(至少现在,使用Jquery 1.7.2),您只需更改this.data变量即可。