使用JSON的Rails Jquery自动完成失败

时间:2012-03-19 14:12:25

标签: jquery ruby-on-rails json autocomplete

我正在尝试使用远程服务来填充我在rails中的自动填充字段。它应该按姓氏查询和返回可用的员工

我的控制器中有一个名为employeeAutocomplete的操作,它从外部数据库收集数据:

class ServicesController < ApplicationController
 def employeeAutocomplete
  @banner = employeeSearch(params[:term])
  respond_to do |format|
    format.json { render :json => @banner.to_json }
  end
 end

在我的routes.rb中,我有一个占位符路径:

match '/banner/cheese' => 'services#employeeAutocomplete'

我可以成功浏览到http://0.0.0.0:3000/banner/cheese.json?term=mac并使用员工数据接收以下数组:

[ {"LAST_NAME": "MacDougal", "FIRST_NAME": "Elaine", "TITLE": "Internet Technician"}, {"LAST_NAME": "MacCallum", "FIRST_NAME": "Harvey", "TITLE": "Systems Architect"} ]

但是,这不适用于自动填充字段。这是我的观点的javascript:

$("#service_employeeLast").autocomplete({
    source: "/banner/cheese.json"
});

我在firebug控制台中收到错误: I receive an error in the firebug console

我的智慧结束了。我不知道我做错了什么,我尝试了两个不同的自动完成插件并继续得到同样的错误jquery.js:8103

帮助!

2 个答案:

答案 0 :(得分:2)

信不信由Google Chrome导致此问题。显然它不喜欢localhost ajax调用。以下是按预期工作的更新代码:

services.js

$(function() {
 $( "#service_employeeLast" ).autocomplete({
    source: "/banner/fetch",
    minLength: 2,

 });
});

services_controller

def employeeAutocomplete
    @banner = employeeSearch(params[:term])
    @banner_hash = []
    @banner.each do |b|
        @banner_hash << { 
            :title => b["POSITION_TITLE"], 
            :label => [b["FIRST_NAME"], b["LAST_NAME"]].join(" "), 
            :value => b["LAST_NAME"], 
        }
    end
    render :json => @banner_hash
end

此处的关键还在于您的返回值哈希具有标签和值键/值对

答案 1 :(得分:1)

也许您使用render :json => @banner.to_json对数据进行了两次编码。它应该是render :json => @banner,数据将自动编码。