包含javascript的Rails json响应

Rails json response that includes javascript

本文关键字:json 响应 Rails javascript 包含      更新时间:2023-09-26

我有一个响应.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

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

只需即可完成

@content = escape_javascript(render(:partial => 'events/bookmarklet').html_safe) 

然后

format.json {content: @content}

在您的前端,您可以获得json响应,响应将包含您的html。

另一种方法是直接渲染部分/模板,并将其作为json对象关闭。。。但当你有办法满足部分。。。比如,如果您使用的是实例或本地控制器变量,则应该注意这些变量。

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)}