【问题标题】:Loading usernames with AJAX - Rails使用 AJAX 加载用户名 - Rails
【发布时间】:2014-04-30 06:31:07
【问题描述】:

我正在使用这个 gem:https://github.com/ichord/jquery-atwho-rails

在我的控制器中:

@usernames = User.pluck(:username).compact

在我看来:

<script>

data = <%= raw User.pluck(:username).compact %>; 
$('textarea').atwho({at:"@", 'data':data});

</script>

这显然是非常危险的,不是一个好主意。但是对于没有 AJAX 或 Javascript 经验的人,我如何使用这个 gem 并通过 AJAX 以有效的方式调用用户名?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby ajax


    【解决方案1】:

    您可以使用remote_filter 回调:

    $('#textarea').atwho({
            at: "@",
            show_the_at: true,
            callbacks: {
                remote_filter: function(query, callback) {
                    // Return false on empty query
                    if (query.length < 1) {
                        return false
                    }
                    // AJAX call to http://yoursite/users.json?q=query
                    $.getJSON("/users.json", {q: query}, function(data) {
                        callback(data.usernames)
                    });
                }
            }
        })
    

    您应该在 /users.json 调用中编写一些对“q”参数(在本例中)的简单处理。这里有一些示例代码:

    # controllers/users_controller.rb
    def index
      respond_to do |format|
       format.json{ render :json => User.where('username like ?', "#{q}%").pluck(:username).compact}
      end
    end
    

    你可以在这里找到更多: https://github.com/ichord/At.js/wiki/How-to-use-remote_filter

    【讨论】:

    • 谢谢!上面的 Javascript/ajax sn-p 在哪里过去?
    • 您当前所在的位置。或者在 $(function(){}); 中的 application.js 中堵塞。关于第二个问题:你应该把它放在 index 方法中,我已经编辑了我的答案。
    • 对不起,我误解了你的意思。我用代码代替了当前脚本,现在什么都没有发生。
    • $('#textarea') - 查看'textarea'之前的'#'。这意味着您的 textarea 应该使用 id="textarea",或者您希望命名它。例如,如果它是 $('#users-textarea').... 你应该像这样放置你的 textarea 'users-textarea' 的 id 属性: 跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多