为什么我需要在rails / ajax的远程链接上添加“data:{type:”script“}”

时间:2013-02-23 14:19:10

标签: ruby-on-rails-3.2 ujs

在我的一个项目中,代码:

  = link_to "add", new_me_category_path, class: "btn btn-success", remote: true

可以正确加载远程表单。

但是有些人无法工作,浏览器没有执行responese js代码。我需要像这样添加“data:{type:”script“}”:

  = link_to "add", new_me_category_path, class: "btn btn-success", remote: true, data: {type: "script"}

我想知道原因。

3 个答案:

答案 0 :(得分:4)

我不是JS专家,我不认识Ruby,但我认为:

当数据类型设置为script时 - 下载的代码会立即加载并执行。

当数据类型为默认值(html)时 - 下载的代码只会加载到浏览器中。你必须“手动”执行它(例如通过调用某个函数)。

如果您的代码只有一些函数可用于以前加载的代码 - 这些函数将可用并且可用(当数据类型为html时)。

如果您的代码中存在已定义的事件 - 它们将无法正常工作,因为它们未初始化,因为未执行代码。

如果我的解释很糟糕,您可以阅读jQuery.get()jQuery.getScript()方法之间的区别。

答案 1 :(得分:2)

在幕后,只要设置了链接的ajax属性,就由data-remote="true"使用jQuery的remote: true方法:http://api.jquery.com/jquery.ajax/https://github.com/rails/jquery-ujs }}

如文档中所述,Ajax确定发送的HTTP Accepts标头,并根据传递给dataType的{​​{1}}和accepts参数解释返回值,这些参数取自uJS对锚点的ajax()属性。

如果通过data-属性未设置dataType,则jQuery会“智能地”推断请求和响应类型。如果您没有明确指定它,这可以解释不一致。

答案 2 :(得分:1)

如果您正在加载脚本,则正确的模板应具有.ejs扩展名(或呈现如下的原始脚本:render js: 'some code')。您必须使用ejs模板中的j来转义html,如下所示:

template.ejs

$('some selector').html('<%= j render('some template') %>');

请给我网址。正确的应以.js结束。