Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeAhead.js不显示任何输出轨道?_Javascript_Ruby On Rails_Autocomplete_Typeahead.js - Fatal编程技术网

Javascript TypeAhead.js不显示任何输出轨道?

Javascript TypeAhead.js不显示任何输出轨道?,javascript,ruby-on-rails,autocomplete,typeahead.js,Javascript,Ruby On Rails,Autocomplete,Typeahead.js,我正在尝试为我的搜索栏设置自动完成功能,这样当你键入自动完成功能时,它会向你推荐具有类似名称的帖子,这样你就不必继续键入。我在控制台中没有得到任何输出,或者在Chrome的控制台中也没有错误 我已经使用了一些教程来尝试设置它。但这是我最关注的一个: 他们都有一些相似的方法来建立这个,所以我认为这是好的。但我仍然无法让自动完成工作 当我跑步时: bundle exec rake routes 我得到了这个,这使它看起来好像没有自动完成路径,但它应该有一个,因为我在我的清单_control

我正在尝试为我的搜索栏设置自动完成功能,这样当你键入自动完成功能时,它会向你推荐具有类似名称的帖子,这样你就不必继续键入。我在控制台中没有得到任何输出,或者在Chrome的控制台中也没有错误

我已经使用了一些教程来尝试设置它。但这是我最关注的一个:

他们都有一些相似的方法来建立这个,所以我认为这是好的。但我仍然无法让自动完成工作

当我跑步时:

bundle exec rake routes
我得到了这个,这使它看起来好像没有自动完成路径,但它应该有一个,因为我在我的清单_controller.rb中创建了自动完成方法,不是吗

like_listing_comment PUT      /listings/:listing_id/comments/:id/like(.:format)   comments#upvote
  unlike_listing_comment PUT      /listings/:listing_id/comments/:id/unlike(.:format) comments#downvote
    listing_comments GET      /listings/:listing_id/comments(.:format)            comments#index
                     POST     /listings/:listing_id/comments(.:format)            comments#create
 new_listing_comment GET      /listings/:listing_id/comments/new(.:format)        comments#new
edit_listing_comment GET      /listings/:listing_id/comments/:id/edit(.:format)   comments#edit
     listing_comment GET      /listings/:listing_id/comments/:id(.:format)        comments#show
                     PATCH    /listings/:listing_id/comments/:id(.:format)        comments#update
                     PUT      /listings/:listing_id/comments/:id(.:format)        comments#update
                     DELETE   /listings/:listing_id/comments/:id(.:format)        comments#destroy
        like_listing PUT      /listings/:id/like(.:format)                        listings#upvote
      unlike_listing PUT      /listings/:id/unlike(.:format)                      listings#downvote
     search_listings GET      /listings/search(.:format)                          listings#search
   autocomplete_listings GET      /listings/autocomplete(.:format)                    listings#autocomplete
            listings GET      /listings(.:format)                                 listings#index
                     POST     /listings(.:format)                                 listings#create
         new_listing GET      /listings/new(.:format)                             listings#new
        edit_listing GET      /listings/:id/edit(.:format)                        listings#edit
             listing GET      /listings/:id(.:format)                             listings#show
                     PATCH    /listings/:id(.:format)                             listings#update
                     PUT      /listings/:id(.:format)                             listings#update
                     DELETE   /listings/:id(.:format)                             listings#destroy
routes.rb

resources :listings do
resources :comments do
  member do
    put "like" => "comments#upvote"
    put "unlike" => "comments#downvote"
  end
end

member do
  put "like" => "listings#upvote"
  put "unlike" => "listings#downvote"
end

collection do
  get 'search'
  get :autocomplete 
end
结束

在我的listings_controller.rb中的autocomplete方法中,您会注意到我将我的查询命名为search,而不是示例中的query,因为我的搜索栏名为search,它的查询也是这样命名的

def search
if params[:search]
  @listings = Listing.search(params[:search])
else
  @listings = Listing.all
end
end
def autocomplete
render json: Listing.search(params[:search], autocomplete: false, limit: 10).map do |listing|
  { title: listing.title, value: listing.id }
end
 end

private

# Use callbacks to share common setup or constraints between actions.
def set_listing
  @listing = Listing.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def listing_params
  params.require(:listing).permit(:name, :code, :language, :private)
end
我不太清楚它为什么不起作用,有人能看一下吗?我觉得我遗漏了一些东西,可能是我使用的教程遗漏了一些东西

编辑:我在一篇帖子中发现,有人试图访问他们的自动完成链接,并且该链接在他们的网页上返回JSON。然而,我的不是。当我尝试访问时:我应该得到一个包含很多内容的json文本,因为我有很多名为Untitled的列表

但我的控制台显示了一个很长的错误:

2016-04-16 20:08:22-0500:HTTP解析错误,请求格式错误():#

2016-04-16 20:08:22-0500:ENV:{“rack.version”=>[1,3],“rack.errors”=>>,“rack.multithread”=>true,“rack.multiprocess”=>false,“rack.run\u once”=>false,“SCRIPT\u NAME”=>,“QUERY\u STRING”=>,“SERVER\u协议”=>“HTTP/1.1”,“服务器\u软件”=>“3.1.0”,“网关\u接口”=>“CGI/1.2”,“请求\u方法”=>,“获取路径”=>,“请求自动完成” listings.js,我已将word books更改为listings,并尝试将以下行更改为url:“../listings/autocomplete?query=%query”url:“../listings/autocomplete?search=%search”、“../listings/autocomplete?search=%query”、“../listings/autocomplete?query=%search”,这些都不起作用

var ready;
ready = function() {
var engine = new Bloodhound({
    datumTokenizer: function(d) {
        console.log(d);
        return Bloodhound.tokenizers.whitespace(d.title);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    remote: {
        url: '../listings/autocomplete?query=%QUERY'
    }
});

var promise = engine.initialize();

promise
    .done(function() { console.log('success })
    .fail(function() { console.log('err });

$('.typeahead').typeahead(null, {
    name: 'engine',
    displayKey: 'title',
    source: engine.ttAdapter()
});
}

$(document).ready(ready);
$(document).on('page:load', ready);
编辑: 我认为javascript可能有问题,在Atom文本编辑器中,它在这一部分强调了成功:

promise
    .done(function() { console.log('success })
    .fail(function() { console.log('err });
我尝试将其更改为:

promise
    .done(function() { console.log('success' });
    .fail(function() { console.log('err' });

但问题依然存在,我对javascript不太了解,但这行代码只应该将成功或错误打印到控制台,对吗?没有其他内容,所以它不应该影响任何内容?

url名称不应该有2个点

    url: '../listings/autocomplete?query=%QUERY'
应该是

    url: '/listings/autocomplete?query=%QUERY'
教程附带的示例应用程序:

谢谢,我刚才更改了,但它仍然没有修复。但是您现在是否至少看到了一个错误,您可以在日志的rails侧看到它?而不是rails侧,但是JavaScript控制台会这样说:Uncaught SyntaxError:意外的令牌非法列表。self-dee8fe3a82ff5baf0f3f6798fbc8b218c218df712487fda9f30263fc24d64a0a.js:18再次检查您是否删除了一些右括号。在您发布的代码中,括号是不平衡的。当然我看不出第18行是什么。你以前用过typeahead吗?你确定你需要这些功能吗(初始化,ttadapter?)如果你不需要,我可以给你一个更简单的演练。不,我从来没有用过:/I我只是想要它,这样用户就可以在键入他可能喜欢的列表时获得建议。我真的不知道所有这些特性都做了什么,我从教程中获取了代码。大多数教程都说你必须具备所有这些。这是第17-19行promise.done(function(){console.log('success}.).fail(function(){console.log('err}));我确实看到它是不平衡的,我在上面的一次编辑中提到了这一点,但更改它似乎也无法修复它。