【问题标题】:Rails json response that includes javascript包含 javascript 的 Rails json 响应
【发布时间】:2015-11-18 11:06:43
【问题描述】:

我有一个响应 .json(json 格式)的应用程序。我还必须构建一个书签,在您执行它的页面上创建一个 div。此小书签向应用程序发出请求,应用程序应使用包含 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 响应?
我可以提供任何需要的其他信息。

【问题讨论】:

  • 您可以简单地使用@content = escape_javascript(render(:partial =&gt; 'events/bookmarklet').html_safe) 然后format.json {content: @content} 来完成它,在您的前端您可以获得json 响应和响应将具有您的html..
  • 缺少部分事件/_bookmarklet 它似乎没有找到部分......任何想法?
  • 视图文件夹中有局部视图吗??
  • 是的,我愿意。好吧,这就是我现在的问题,正如我所说,您应该将其作为答案发布,以便我检查。
  • 感觉不太对劲..你能分享一下你的其他问题..让我看看吗?

标签: javascript ruby-on-rails json


【解决方案1】:

你可以简单地做到这一点

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

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 2011-09-01
    • 2015-02-12
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多