繁体   English   中英

除非调用,否则不要在erb中运行JS

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM