2012-05-01 48 views
0

我从来没有这样做过,我试图为每个自动完成列表项目显示多个ldap属性。解析JSON到Rails的jQuery ajax自动完成列表

例如,我在ldap中搜索“admin”作为sAMAccountName,并且我的搜索函数为每个匹配返回两个值。 sAMAccountName和idnumber,所以我的列表项必须包含sAMAccountName和idnumber。而不仅仅是在文本字段中键入的sAMAccountName“admin”。我怎样才能让jQuery为每个列表项目读取多个属性?

def search 
    if (params[:term] =~ /[a-zA-Z]/) 
    @result = User.FindLdap("sAMAccountName", params[:term]) 
    else 
    @result = User.FindLdap("idnumber", params[:term]) 
    end 

    respond_to do |format| 
    format.json { render :json=> @result.to_json } 
    format.js 
    end 
end 
$(function() { 
    $("#term").autocomplete({ 
    source: function (request, response) { 
     $.post("https://stackoverflow.com/users/search", request, response); 
    }, 
    minLength: 2, 
    select: function() {} 
    }); 
}); 

回答

0

这很难说什么是用户模型的属性,但我相信他们是sAMAccountName赋与的IDNumber,所以在这里更换为您在jQuery的自动完成的方法

source: function(request, response) { 
    $.ajax({ 
     url: "https://stackoverflow.com/users/search", 
     dataType: "json", 
     data: { 
      term: request.term 
     }, 
     success: function(data) { 
      // remove users in line below if JSON is not prepanded with users attribute 
      response($.map(data.users, function(user) { 
       return { 
        // this is formated string which will be visible in autocomplete list 
        // example "123213, admin" 
        label: user.idnumber + ", " + user.sAMAccountName, 
        value: user.idnumber 
       } 
      })); 
     } 
    }); 
}, 

上面的代码将从服务器转换(地图)响应格式为

[ { label: "<idnumber>, <sAMAccountName>" , value: "<idnumber>" }, .....] 

不用担心jQuery自动完成知道如何处理这个数组;