【问题标题】:Using jQuery UI autocomplete plugin in Rails app在 Rails 应用程序中使用 jQuery UI 自动完成插件
【发布时间】:2011-04-21 08:17:01
【问题描述】:

我有兴趣在我的 Rails 应用程序中使用 jQuery UI autocomplete plugin。可能值的数量会很少,所以我想将它们存储在客户端。所以我的控制器设置如下:

def index
  @tags = Tag.find(:all).map { |t| t.name }
end

在我看来:

var tags = <%= @tags %>

问题在于它呈现为:

var tags = [&quot;tag1&quot;,&quot;tag2&quot;];

代替:

var tags = ["tag1","tag2"] 

为了停止在我的标签数组中转义这些引号,我需要做些什么不同的事情?

【问题讨论】:

    标签: javascript ruby-on-rails autocomplete


    【解决方案1】:

    怎么样:

    var tags = <%=raw @tags %>;
    

    编辑:

    在你的控制器中

    @tags = Tag.find(:all).map(&:name).to_json
    

    在你看来:

    var tags = <%= @tags %>;
    

    它与您提供的内容相同,但您确定它是有效的并且确定(因为转义)json(+ 查询得到了改进)。

    我还在质疑 XSS + raw...

    【讨论】:

      【解决方案2】:

      我可以通过将视图代码更改为:

      <%= array_or_string_for_javascript(@tags) %>
      

      【讨论】:

        【解决方案3】:

        您的控制器中缺少的东西是 html_safe - 这是一个示例:

        控制器

        @keys = @categories.map { |x| x.name }   
        @autocomplete_categories = @keys.to_json.html_safe
        

        查看:

        <script type="text/javascript">
        $(document).ready(function() {
            var data = <%= @autocomplete_categories %>;
            $("#auto").autocomplete( { source: data } );
        });
        </script>
        

        【讨论】:

        • 它和使用'raw'的效果一样,但我仍然想知道它是否不会受到 XSS 攻击
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 2011-10-11
        相关资源
        最近更新 更多