【发布时间】:2011-05-30 20:19:12
【问题描述】:
我有一个带有 data-remote="true" 属性的 Ajax 表单,我将其提交给 rails 中的控制器。
我想做的是使用jquery-ujs event system 在请求发送到服务器之前将数据附加到请求中。
类似这样的:
$("#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;j<k;j++){e=p[j];if(c&&e.level>c)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
【问题讨论】:
-
您使用的是哪个 jQuery 版本?
-
看起来你的 POST 是空的
-
应该在
data对吧?该表单虽然运行良好,但我可以看到数据是在开发工具的网络选项卡中发送的(通过 XMLHttpRequest)。我不明白。 -
您是否尝试过将“数据”设置为某些内容,例如:“foo=bar”并检查它是否被提交
-
是的,我试过了。我设置了
xhr.data = 'foo',然后在服务器上记录了请求参数。它没有列出。它似乎也没有影响其余的请求参数。那绝对是我持有的 jqXHR 对象吗?
标签: ruby-on-rails ruby-on-rails-3 jquery