don'除非调用,否则不要在erb中运行JS
don't run JS in erb unless called
我有一个页面,其中包含一个到ruby函数的ajax GET。Get请求应该返回变量@player。当ajax"成功"时,它应该调用函数popPools
$.ajax({
type: "GET",
data: { faceid : response.id },
url: "/pool/mMypools2",
success: popPools()
})
function popPools(){
$("<%= content_tag(:p, @player[0].id) %>"
).appendTo(document.getElementById("asd"));}
我的问题是,在ajax有机会从mMypools响应中获取新变量之前,函数popPools被自动调用。
error:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
因为onload@player不包含任何内容。
感谢
删除popPools
:末尾的括号
$.ajax({
type: "GET",
data: { faceid : response.id },
url: "/pool/mMypools2",
success: popPools
})
您传递的是popPools函数的结果作为success
的值,而不是函数本身。
听起来您在响应模板中做得太多了。Ajax代码实际上属于控制器级别,因为它试图从应用程序中获取数据。模板应该保持"哑"状态,只响应传递给它的变量
为了解决这个问题,我会将文件的顶部完全移出响应模板。一旦你在控制器级别正确加载了@player,然后继续你的响应。哦,别忘了用Javascript转义生成的HTML,或者content_tag
函数返回的任何引号都会破坏jQuery。
file.js.erb:
$(
"<%= j content_tag(:p, @player[0].id) %>"
).appendTo(document.getElementById("asd"));}
我希望这个建议能有所帮助。
相关文章:
- Rails 3.2 js.erb文件转义js
- Js.erb VS按钮标记-不'不起作用.为什么?
- js.erb文件未呈现其内容
- 如何使用 Ruby 在 Javascript (js.erb) 中设置 url
- Rails:如何在jQuery(.js.erb)中调用“create”操作
- js erb 内的 Rails 会话为空
- 使用 HAML 的复杂 ERB 替换在 JS 中失败
- 在Rails中使用remote:true在Chrome中有效,但在Safari中无效——从js.erb文件调用succe
- js.erb文件中提供给RegExp构造函数的标志无效
- 如何在我的create.js.erb中重置/清除表单
- Rails js.erb文件未执行
- js.erb格式的控制器测试
- 使用控制器在conditional.js.erb文件中设置变量
- 我的 update.js.erb 文件仅在第一次单击按钮时运行,而不在后续单击时运行(单击时更改按钮的类和值)
- 在 Ajax 中创建 RoR 链接 在 .js.erb 文件中调用
- Rails 3 嵌入式小部件:show.js.erb 似乎不起作用
- js.erb 呈现到布局中,而不是执行
- Rails 4 是否允许在.JS视图中使用红宝石代码,在 rails 3 中,文件名中需要包含 .erb.js
- Ruby on Rails 路由前缀,而不是在 .erb.js 文件中进行预处理
- 如何响应AJAX调用没有erb.js /为什么使用erb.js