jquery - Rails Jquery 自动完成 JSON 失败

标签 jquery ruby-on-rails json autocomplete

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

我的 Controller 中有一个名为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

救命!

最佳答案

不管你信不信,这个问题都是由 Google Chrome 引起的。显然它不喜欢本地主机 ajax 调用。以下是按预期工作的更新后的代码:

服务.js

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

 });
});

服务 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

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

关于jquery - Rails Jquery 自动完成 JSON 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9771724/

相关文章:

ruby-on-rails - 使用 Ruby on Rails + PostgresQL 显示 2 周或更早的地点

c# - 将嵌套的 JSON 转换为 CSV

javascript - 按钮仅在您开始输入时出现

javascript - 每 9 次循环后将三元条件设为真

javascript - 添加链接元素 <a> 到段落 <p> Javascript

c# - 如何读取 HTTP header 值

javascript - 使用来自 json 的 ng-flow.js 填充图像文件

javascript - 使用 ajax 和 jquery javascript 重复结果

javascript - JSON 对象到 Rails 对象

ruby-on-rails - Rspec:在辅助测试中设置 cookie