【问题标题】:How to call a controller function from javascript using ajax如何使用ajax从javascript调用控制器函数
【发布时间】:2013-12-15 22:25:51
【问题描述】:

您好,我正在尝试从我的 javascript 调用我在控制器上编写的函数,这是我单击按钮时的操作结果。

我关注了thread,但它根本不起作用。当我点击按钮时,我得到下面列出的错误:

Started GET "/projects/:id/repository/:branch" for 127.0.0.1 at 2013-11-29 15:03:43 -0200
Processing by RepositoriesController#show as */*
  Parameters: {"id"=>":id", "repository_id"=>":branch"}
  ←[1m←[35m (0.0ms)←[0m  SELECT MAX(`settings`.`updated_on`) AS max_id FROM `settings`
  ←[1m←[36mUser Load (0.0ms)←[0m  ←[1mSELECT `users`.* FROM `users` WHERE `users`.`type` IN ('User', 'AnonymousUser') AND `users`.`status` = 1 AND `users`.`
id` = 10 LIMIT 1←[0m
  Current user: guilherme.noronha (id=10)
  ←[1m←[35mProject Load (1.0ms)←[0m  SELECT `projects`.* FROM `projects` WHERE `projects`.`identifier` = ':id' LIMIT 1
  Rendered common/error.html.erb (1.0ms)
Filter chain halted as :find_project_repository rendered or redirected
Completed 404 Not Found in 24ms (Views: 21.0ms | ActiveRecord: 1.0ms)

我不太明白为什么会收到此错误,所以我在这里寻求帮助。

请查看我的代码以尝试检测某些错误或缺少某些内容:

_view_button_release.html.erb

<script>
    function CallExec(rep) {
      $.ajax("/projects/:id/repository/:branch");
    }
</script>

<div class="contextual">
<% if User.current.allowed_to?(:exec, @project) %>
    <%= button_to_function l(:gerar_build_project), 'CallExec("'+params[:repository_id].to_s+'")' %>
|
<% end %>
</div>

routes.rb

resources :repositories do
  match 'projects/:id/repository', :action => 'exec_client', :controller => 'repositories', :via => :post
  match 'projects/:id/repository/:branch', :action => 'exec_client', :controller => 'repositories', :via => :post
  get :exec_client, on: :collection
end

client.rb(钩子)

module InstanceMethods
  require_dependency 'repositories_controller'
  def exec_client
    begin
      ...
    end
  end
end

有什么建议吗?

更新:

新日志

Started GET "/projects/b1309/repository/b1309i11/" for 127.0.0.1 at 2013-12-02 10:38:00 -0200
Processing by RepositoriesController#show as */*
  Parameters: {"id"=>"b1309", "repository_id"=>"b1309i11"}
  ←[1m←[35m (0.0ms)←[0m  SELECT MAX(`settings`.`updated_on`) AS max_id FROM `settings`
  ←[1m←[36mUser Load (0.0ms)←[0m  ←[1mSELECT `users`.* FROM `users` WHERE `users`.`type` IN ('User', 'AnonymousUser') AND `users`.`status` = 1 AND `users`.`
id` = 10 LIMIT 1←[0m
  Current user: guilherme.noronha (id=10)

【问题讨论】:

    标签: javascript jquery ruby-on-rails redmine redmine-plugins


    【解决方案1】:

    第一。在你的 js 代码中

    $.ajax("/projects/:id/repository/:branch");
    

    您需要插入而不是 :id 项目标识符,而不是 :branch 分支 id 或分支名称(我不知道控制器期望什么)。

    第二。您需要正确传递参数,因为我没有看到它们中的任何一个进入日志。我看到从 url Parameters: {"id"=&gt;":id", "repository_id"=&gt;":branch"} 获取的参数。如何通过ajax传递参数你可以google。例如,您可以查看jquery doc 并找到examples

    【讨论】:

    • 我已按照您的建议更改了约会,但也不起作用。尽管错误消失了,但在我按下按钮后该功能仍未调用。
    • 我更新了问题,将新日志放在问题的底部。
    • 看起来一切正常。您的 ajax 请求调用 RepositoriesController#show 您应该在操作 {"id"=&gt;"b1309", "repository_id"=&gt;"b1309i11"} 中获取此参数。现在你可以在这里写逻辑并返回js.erb 例如github.com/redmine/redmine/blob/master/app/views/issues/…
    • 为什么 ajax 请求调用 RepositoriesController#show?有没有办法调用我为此按钮编写的函数 exec_function?
    • 我认为是因为你的CallExec js 函数调用了$.ajax("/projects/:id/repository/:branch");
    猜你喜欢
    • 1970-01-01
    • 2017-08-22
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多