2012-05-01 2 views
0

필자는 전에 한 번도 해본 적이 없지만 각 autocomplete 목록 항목에 대해 여러 개의 ldap 속성을 표시하려고합니다.Parse json to jquery Ajax autocomplete list from Rails

예를 들어, "admin"을 ldap의 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 자동 완성이이 배열을 처리하는 방법을 알고 있으므로 걱정하지 마십시오.)