2013-02-23 12 views
5

在我的一个项目,代码:为什么需要添加“数据:{类型:‘脚本’}”在远程链路与导轨/ AJAX

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

可以正确加载远程形式。

但有些人不能工作,浏览器并没有执行相应的js代码。我需要添加“data:{type:”script“}”“像这样:

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

我想知道原因。

+0

你可以添加更多的代码吗? – Kamil 2013-02-27 14:59:05

回答

4

我不是JS专家,我不知道红宝石,但我认为:

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

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

如果您的代码只是为了与以前加载代码中使用的一些功能 - 这些功能将可用,并且将工作(当数据类型是html)。

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

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

1

如果您正在加载脚本,则正确的模板应该有.ejs扩展名(或渲染原始脚本,例如:render js: 'some code')。你必须在这样的EJS模板使用j逃脱HTML:

template.ejs

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

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

2

在幕后,jQuery的ajax方法用于:http://api.jquery.com/jquery.ajax/由UJS https://github.com/rails/jquery-ujs只要链接的data-remote="true"属性设置,这是remote: true完成。

如文档中所述,Ajax的确定HTTP接受头中发送并解释基于所述dataTypeaccepts参数传递给ajax(),其在这里是从由UJS锚的data-属性采取的返回值。

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

相关问题