Rails JQuery автозаполнение с JSON не удается - PullRequest
2 голосов
/ 19 марта 2012

Я пытаюсь использовать удаленный сервис для заполнения поля автозаполнения, которое у меня есть в rails. Предполагается запрашивать и возвращать доступных сотрудников по фамилии

В моем контроллере есть действие employeeAutocomplete, которое собирает данные из внешней базы данных:

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

В моем route.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 ]

2 голосов
/ 20 марта 2012

Верьте или нет, это был Google Chrome, вызывающий проблему.Очевидно, он не любит локальные вызовы 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 голос
/ 19 марта 2012

Возможно, вы дважды закодировали данные с помощью render :json => @banner.to_json. Это должно быть render :json => @banner, и данные будут закодированы автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...