0

我有一个 ajax 表单来发送这些点,并通过这些点找到这两点之间的最短路径。

所有这些都可以在没有 ajax 的情况下工作,只需将数据发送到服务器并重新渲染页面和所有这些东西,但我需要使用 ajax 进行这项工作

问题是我无法将在服务器(控制器+模型)中生成的数据(json)发送/上传到客户端(视图)

我正在做这个(1)以及我如何说它在没有 ajax 的情况下工作

(1)

# views/places/finder.html.erb    
<%= form_tag({controller: "places", action: "found"}, remote: true) do %>
    <%= hidden_field_tag :lon_s %> # 
    <%= hidden_field_tag :lat_s %> # these fields are updated automatically
    <%= hidden_field_tag :lon_t %> # with clicks the user do on the map 
    <%= hidden_field_tag :lat_t %> #

    <%= submit_tag "Buscar ruta", id: 'buscar_ruta' %>
<% end -%>

#places_controller.rb
def found
    res = Way.path_cost_from(params[:lon_s].to_f, params[:lat_s].to_f, 
                             params[:lon_t].to_f, params[:lat_t].to_f)
    @costo = res[:cost]
    gon.poly = Way.get_way(res[:edges])
    @path = Way.get_way(res[:edges])
end

#views/places/found.js.coffee
console.log <%= @costo %> #this show the cost in the console, it works.
console.log <%= gon.poly %> #undefined local variable or method `gon'
console.log <%= @path %> #Error: Parse error on line 3: Unexpected ':'

在没有 ajax 的版本之前,我使用gon gem来传递谷歌地图 API 需要显示/构建折线所需的点。

#assets/javascripsts/places.js.coffee
if gon.poly?
  poly = gon.poly
  MAP.addPolyline poly

poly是我以 json 格式构建的对象。

each do |point|
    path << { lon: unprojected_point.x, lat: unprojected_point.y }
end
return path

如果您愿意,可以在我的 github 帐户https://github.com/figuedmundo/final中查看我的项目

我一直在寻找执行此操作的示例,但我发现的唯一示例是呈现一些用于更新页面的 html 代码(普通的 ajax),但 google maps api 只是 javascript。


解决方案

我的代码的想法可能不是最佳的,但它可以工作,最终这就是客户想要的。

问题是自动传递给视图的变量@path被转义了,所以json对象不可读。html_safe 解决问题

console.log <%=  @path.html_safe %>
4

1 回答 1

0

我认为您可以尝试使用 <%= f.submit_tag "Buscar ruta", id: 'buscar_ruta' %> 而不是 <%= submit_tag "Buscar ruta", id: 'buscar_ruta' %

于 2012-09-26T00:11:53.637 回答