我有一个响应.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响应? 我可以提供所需的任何其他信息。
答案 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)}