gpt4 book ai didi

javascript - 为什么对 Rails API 的 GET 请求不起作用?

转载 作者:行者123 更新时间:2023-11-28 01:11:09 25 4
gpt4 key购买 nike

我使用以下代码来GET所有机场数据(localhost:3000/api/v1/airports),所以 Typeahead.js可以自动完成机场信息。

$(document).on('ready page:load', function () {

var airports = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('search_string'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 10,
prefetch: {
url: window.location.origin + "/api/v1/airports"
}
});

// kicks off the loading/processing of `local` and `prefetch`
airports.initialize();

// passing in `null` for the `options` arguments will result in the default
// options being used
$('.typeahead').typeahead(null, {
name: 'airports',
displayKey: 'search_string',
// `ttAdapter` wraps the suggestion engine in an adapter that
// is compatible with the typeahead jQuery plugin
source: airports.ttAdapter()
});

});

当我将其部署到 Heroku 并访问表单页面时,Chrome 中的控制台返回以下内容:

GET http://localhost:3000/api/v1/airports.json net::ERR_EMPTY_RESPONSE application-b3c93a17005e4f5b078b985c7fa12088.js:3

它应该响应以下 Controller :

module Api
module V1
class AirportsController < ApplicationController
skip_before_filter :verify_authenticity_token
respond_to :json

def index
respond_with(Airport.all)
end

def search
respond_with(Airport.pluck(:search_string))
end

def show
respond_with(Airport.find(params[:id]))
end

def create
@airport = Airport.new(airport.params)
if @airport.save
respond_to do |format|
format.json { render :json => @airport }
end
end
end

def update
@airport = Airport.find(params[:id])
if @airport.update(todo_params)
respond_to do |format|
format.json { render :json => @airport }
end
end
end

def destroy
respond_with Airport.destroy(params[:id])
end

end
end
end

这就是路线的样子:

namespace :api, defaults: {format: :json} do
namespace :v1 do
get 'airports/search', to: 'airports#search', as: 'search'

resources :airports, :airlines, :countries
end
end

它在我的开发环境中确实有效。有什么想法吗?

最佳答案

您的 Assets ,特别是您的 javascript,包含针对 GET/json 请求的 http://localhost:3000 的硬编码链接,我从您的 javascript 代码中的一些测试中猜想。

它被编译并保留在那里。

在生产环境中,您对 Assets 所做的更改不会应用于已编译的 Assets (它们已编译...)。

资源编译的唯一目的是加载速度更快......

因此,每次更改后,您都必须重新编译资源才能使更改生效。这是一个乏味的过程(我重复一遍,仅在标准生产环境中),但如果您在生产环境中运行仍在开发中的应用程序,则这是必要的(这种情况发生的频率比您想象的要高)。

这就是为什么重新编译您的 Assets 并重新启动应用程序服务器将解决您的问题的原因。

关于javascript - 为什么对 Rails API 的 GET 请求不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24417454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com