2

我有一个带有 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"));}

我的问题是函数 popPools 在 ajax 有机会从 mMypools 响应中获取新变量之前被自动调用。

error:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

因为 onload @player 什么都不包含。

谢谢你

4

2 回答 2

0

删除末尾的括号popPools

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

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

于 2013-02-24T16:07:17.747 回答
0

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

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

文件.js.erb:

$(
  "<%= j content_tag(:p, @player[0].id) %>"
 ).appendTo(document.getElementById("asd"));}

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

于 2013-02-24T16:24:18.930 回答