[英]don't run JS in erb unless called
我有一个页面,带有一个ajax GET到ruby函数。 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"));}
希望此建议对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.