包含javascript的Rails json响应

时间:2015-11-18 11:06:44

标签: javascript ruby-on-rails json

我有一个响应.json(json格式)的应用程序。我还必须构建一个bookmarklet,在你执行它的页面上创建一个div。这个bookmarklet向应用程序发出请求,应用程序应该使用包含javascript的json对象进行响应。让我们说这就是所有的javascript:

function selectElementContents()
{
  el = document.getElementById('quicklink_value')
  if (document.body.createTextRange) {
        // IE
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        textRange.select();
        textRange.execCommand("Copy");
    }
  else if (window.getSelection && document.createRange) {
        // non-IE
        var range = document.createRange();
        range.selectNodeContents(el);
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
        var range = document.createRange();
        try {
        var successful = document.execCommand('copy');
        var msg = successful ? 'successful' : 'unsuccessful';
    } catch(err) {
        console.log('Oops, unable to copy');
      }
    }
}
content = "<%= escape_javascript(render(:partial => 'events/bookmarklet').html_safe) %>";
_tp_bookmarklet(content);

正如您所看到的,我还有一个部分需要在名为content的变量中呈现。

def bookmarklet
    respond_to do |format|
      format.json
    end
  end

这是小书签正在调用的操作。如何将javascript(包含其中包含渲染部分的内容变量)作为json响应? 我可以提供所需的任何其他信息。

1 个答案:

答案 0 :(得分:0)

您只需

就可以完成
@content = escape_javascript(render(:partial => 'events/bookmarklet').html_safe) 

然后

format.json {content: @content}

并且在你的前端你可以得到json响应,响应将有你的html。

另一种方法是直接渲染部分/模板并将其作为json对象传递出去......但是当你有办法在部分中提供控制器变量时,这将有效...就像if你正在使用实例或本地的控制器变量,你应该处理它们。

format.json { content: escape_javascript(render(:partial => 'events/bookmarklet').html_safe) }

或者您可以做的是创建一个method可能是私有的,以呈现您的部分

def blahblah (params...)
    escape_javascript(render(:partial => 'events/bookmarklet').html_safe)
end
........
format.json {content: blahblah(params)}