ajaxSetup 不适用于 Rails / jquery-ujs

Posted

技术标签:

【中文标题】ajaxSetup 不适用于 Rails / jquery-ujs【英文标题】:ajaxSetup not working with Rails / jquery-ujs 【发布时间】:2012-05-21 00:24:42 【问题描述】:

我正在处理一个大量使用 XHR 的项目,并且需要将一些数据附加到每个 ajax 请求中,以便服务器端正确跟踪浏览器中发生的事情。

我有一个名为 xhr_response_handler 的通用类,用于处理所有 ajax 请求的回调,这些请求添加到发出 ajax 请求的所有表单、链接等。 (即“:remote => true”在rails中的位置)

$('.xhr_response_handler')
    .on('ajax:success', function(event, data, status, xhr)  xhr_success(data); )
    .on('ajax:failure', function(xhr, status, error)  xhr_fail(error); );

然后我尝试使用以下命令附加随每个请求发送的默认数据:

$.ajaxSetup(
    data: 
        Foo: <%= @Bar %>
    
);

这适用于直接使用 jquery 配置 ajax 设置的某些元素,但不适用于使用 rails 方法(如 link_to 和 form_for 以及 :remote => true)创建的某些元素。

奇怪的是,如果我也加了

$('.xhr_response_handler').data( 'params',  Foo2: <%= @Bar2 %>  );

然后,这适用于使用 link_to 将数据添加到 rails 生成的 ajax 请求。奇怪的是,现在突然之间 ajaxSettings 也可以工作了,在 ajax 请求中,我将 Foo 和 Foo2 作为参数。但是当我自己使用 ajaxSettings 时,我根本没有得到任何参数。

此外,没有任何要附加的数据被序列化为通过 rails form_for 方法生成的 ajax 请求中发送的表单数据。

任何帮助将不胜感激。

Rails 3.2.3

红宝石 1.9.3p194

jQuery 1.7.2

【问题讨论】:

你找到解决方案了吗? 【参考方案1】:

我认为出现这种行为是因为 $.ajaxSetup 的数据哈希被您稍后执行的 ajax 调用覆盖。数据必须手动合并。

【讨论】:

以上是关于ajaxSetup 不适用于 Rails / jquery-ujs的主要内容,如果未能解决你的问题,请参考以下文章

Rails 低级缓存不适用于活动记录

jQuery masonry 不适用于 Rails

jquery 比率插件不适用于 Rails

Rails 5:更新操作不适用于 AJAXified 表单

Ajax + Rails 不适用于 Heroku

如何使 animate.css 在 Rails 中工作?由于 animate-rails 不适用于 heroku