我有一个带有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什么都没包含。
谢谢
答案 0 :(得分:0)
从popPools
:
$.ajax({
type: "GET",
data: { faceid : response.id },
url: "/pool/mMypools2",
success: popPools
})
您将popPools函数的结果作为success
的值而不是函数本身传递。
答案 1 :(得分:0)
听起来你在响应模板中试图做太多。 Ajax代码确实属于控制器级别,因为它试图从应用程序中获取数据。模板应该保持“哑”并只响应传递给它的变量。
要解决此问题,我会将文件的顶部完全移出响应模板。在控制器级别正确加载@player后,继续进行响应。哦,不要忘记Javascript转义生成的HTML或任何返回content_tag
函数的引号都会破坏jQuery。
file.js.erb:
$(
"<%= j content_tag(:p, @player[0].id) %>"
).appendTo(document.getElementById("asd"));}
我希望这个建议有所帮助。