我可以使用JSON响应来执行escape_javascript吗?
我运行Rails 4.2.1并使用Facebook测试OAuth。我用Facebook SDK制作了带有远程true和ajax请求的link_to。
window.fbAsyncInit = ->
FB.init
appId: 'AppID'
status: true
cookie: true
xfbml: true
return
((d) ->
js = undefined
id = 'facebook-jssdk'
if d.getElementById(id)
return
js = d.createElement('script')
js.id = id
js.async = true
js.src = '//connect.facebook.net/en_US/all.js'
d.getElementsByTagName('head')[0].appendChild js
return
) document
$ ->
$('#facebook, #vkontakte').click (e) ->
e.preventDefault()
FB.login ((response) ->
if response.authResponse
$('.modal').modal('hide')
# $('#results').html 'Connected! Hitting OmniAuth callback (GET users/auth/facebook/callback)...'
# since we have cookies enabled, this request will allow omniauth to parse
# out the auth code from the signed request in the fbsr_XXX cookie
$.getJSON '/profile/auth/facebook/callback', (json) ->
# $('#results').html JSON.stringify(json)
# Do some other stuff here (call more json, load in more elements, etc)
return
return
), scope: 'email'
# These are the permissions you are requesting
return
$('#connect .signout').click (e) ->
e.preventDefault()
$.getJSON '/auth/facebook/signout', (json) ->
$('#results').html JSON.stringify(json)
return
return
return
一切正常,我让我的用户使用他的帐户登录,但是我需要进行一些前端更新(即重新渲染一些部分等等)。我喜欢远程true和javascript_escape概念所以我想很高兴在JSON上使用相同,但找不到任何例子..
答案 0 :(得分:0)
当您将链接设为远程true时,您的控制器将默认尝试呈现action.js.erb视图文件,其中action是您路由到的操作的名称,例如show.js.erb
在该视图文件中,您将编写javascript和嵌入式Ruby,就像在html.erb视图文件中一样。
如果要在页面上重新呈现部分内容,则必须使用render_javascript渲染方法的结果,以便可以安全地将html字符串传递给javascript。
$("#some-div").html("<%= escape_javascript render(partial: "some_content") %>");
请注意,erb标记位于引号内,这样您最终会将字符串传递给html函数。您还可以使用快捷方式助手j
$("#some-div").html("<%= j render(partial: "some_content") %>");
http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html
答案 1 :(得分:0)
最后提出了另一个想法,ajax js制作技巧的一点变化。
$('#facebook, #vkontakte').click (e) ->
e.preventDefault()
FB.login ((response) ->
$('.modal').modal('hide')
# $('#results').html 'Connected! Hitting OmniAuth callback (GET users/auth/facebook/callback)...'
# since we have cookies enabled, this request will allow omniauth to parse
# out the auth code from the signed request in the fbsr_XXX cookie
# $.getJSON '/profile/auth/facebook/callback', (json) ->
$.get '/profile/auth/facebook/callback' if response.authResponse
), scope: 'email'
# These are the permissions you are requesting
return