在我的一个项目中,代码:
= 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"}
我想知道原因。
答案 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
结束。