2015-11-18 41 views
1

我有一个响应.json(json格式)的应用程序。我还必须构建一个书签,在您执行它的页面上创建一个div。这个小书签向应用程序发出请求,并且应用程序应该响应包含javascript的json对象。比方说,这是所有的JavaScript是:包含javascript的Rails json响应

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

正如你看到的我也有一个部分是需要被一个变量命名为里面的内容呈现。

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

这是由小书签调用的动作。我怎样才能将JavaScript(包含呈现的部分内容变量)作为json响应?
我可以提供任何需要的附加信息。

+0

你可以这样做只是'@content = escape_javascript(渲染(:部分=> 'events/bookmarklet')。html_safe)'然后'format.json {content:@content}'并且在你的前端你可以得到'json'响应并且响应将会有你的html .. – Minato

+0

缺少部分事件/ _bookmarklet它似乎没有找到部分...任何想法? –

+0

你有在视图文件夹中的局部视图? – Minato

回答

0

你可以简单地

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