ruby-on-rails - ajaxSetup 不适用于 Rails/jquery-ujs

标签 ruby-on-rails ajax jquery ujs

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

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

$('.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

ruby 1.9.3p194

jQuery 1.7.2

最佳答案

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

关于ruby-on-rails - ajaxSetup 不适用于 Rails/jquery-ujs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567740/

相关文章:

Javascript 读取以一些额外字符串开头的 json

javascript - 难以定位使用 CSS 滑动的 div

javascript - 错误 : function is not defined

ruby-on-rails - 如何修复 [unixODBC][Driver Manager] 未找到数据源名称且未指定默认驱动程序 (ODBC::Error)

ruby-on-rails - rspec 大十进制匹配器

ruby-on-rails - Rails 公用文件夹项目在生产中不可用

php - Javascript 表单和对 PHP 的 Ajax 请求

javascript - 如何为 html 页面中的所有 ajax 错误提供全局代码?

javascript - 将 Adob​​e Edge 脚本添加到 Rails Assets 管道

ruby-on-rails - Has_many 通过复选框(simple_form)不保存