Javascript don';除非调用,否则不要在erb中运行JS

Javascript don';除非调用,否则不要在erb中运行JS,javascript,ruby-on-rails,Javascript,Ruby On Rails,我有一个带有ajax的页面,可以访问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)

我有一个带有ajax的页面,可以访问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"));}
因为onload@player不包含任何内容


谢谢

删除
popPools
末尾的括号:

$.ajax({
  type: "GET",
  data: { faceid : response.id },
  url: "/pool/mMypools2",
  success: popPools
  })

您将popPools函数的结果作为
成功的值传递,而不是函数本身。

听起来您在响应模板中做的太多了。Ajax代码实际上属于控制器级别,因为它试图从应用程序中获取数据。模板应该保持“哑”,只响应传递给它的变量

要解决这个问题,我会将文件的顶部完全移出响应模板。在控制器级别正确加载@player后,继续响应。哦,别忘了用Javascript转义生成的HTML或任何返回的引号,
content\u标记
函数将破坏jQuery

file.js.erb:

$(
""
).appendTo(document.getElementById(“asd”);}

我希望这个建议能有所帮助。

我建议您多读一点javascript。你可以在这里查一些:谢谢,我试过了。通过这种方式,根本不会从ajax请求调用函数。真的是这样吗?我没弄错,对吗?服务器应该将新变量从mMypools2发送到客户端?我实际上不太了解RoR…我回答了你的问题,因为问题似乎是Javascript。如果在我建议的修改之后没有调用popPools,这意味着Ajax请求没有成功。试着在Firebug中查看它,看看实际的Ajax请求和响应包含什么(我猜你可能会看到响应中出现某种错误,希望能给你一个线索)<代码>$(“”)
可能有问题。除非它返回您需要的确切的jQuery选择器……请记住jQuery对ERB一无所知,所以您的目标是通过ERB构造一个jQuery能够理解的有效选择器。此外,jQuery的整个要点是避免像
document.getElementById
这样冗长的Javascript—只需使用$(“#您的#id_去这里”)。我建议大家阅读jQuery的基础知识。谢谢Matt B。现在一切都正常了,我做了您建议的更改,但是页面仍然在运行函数popPools,而我没有调用它。关于content_标记-这是一种使用rails动态创建新html标记的方法,一旦手动而非自动调用该函数,此部分将起作用(调试时检查)。谢谢,这很有用,因为我无法从控制器获取它,因为我需要等待facebook将令牌和响应发送给我。只有这样我才能用Faceid调用控制器。
$.ajax({
  type: "GET",
  data: { faceid : response.id },
  url: "/pool/mMypools2",
  success: popPools
  })
$(
  "<%= j content_tag(:p, @player[0].id) %>"
 ).appendTo(document.getElementById("asd"));}