5

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

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

可以正确加载远程表单。

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

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

我想知道原因。

4

3 回答 3

4

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

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

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

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

如果您的代码中有定义的事件 - 它们将不起作用,因为它们没有被初始化,因为代码没有被执行。

jQuery.get()如果我的解释不好 - 您可能会阅读和jQuery.getScript()方法之间的区别。

于 2013-02-27T15:12:18.473 回答
2

在幕后,使用 jQuery 的ajax方法:http://api.jquery.com/jquery.ajax/ by uJS https://github.com/rails/jquery-ujs每当data-remote="true"设置链接的属性时,就完成了由remote: true.

如文档中所述,Ajax 确定发送的 HTTP Accepts 标头并根据传递给的dataType和参数解释返回值,此处这些参数取自uJS 的锚点属性。acceptsajax()data-

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

于 2014-06-26T18:14:32.987 回答
1

如果你加载脚本正确的模板应该有.ejs扩展名(或者像这样渲染原始脚本:)render js: 'some code'。您必须j像这样在 ejs 模板中使用 html 转义:

模板.ejs

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

请也给我网址。正确的应该以 . 结尾.js

于 2013-03-06T10:11:13.060 回答