如何使用ajax从javascript调用控制器函数

如何使用ajax从javascript调用控制器函数,javascript,jquery,ruby-on-rails,redmine,redmine-plugins,Javascript,Jquery,Ruby On Rails,Redmine,Redmine Plugins,您好,我正在尝试调用一个函数,当我点击一个按钮时,作为一个操作的结果,我从javascript在我的控制器上编写了这个函数 我遵循了这一点,但它根本不起作用。当我点击按钮时,我得到下面列出的错误: 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

您好,我正在尝试调用一个函数,当我点击一个按钮时,作为一个操作的结果,我从javascript在我的控制器上编写了这个函数

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

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)
我不太明白为什么会出现这个错误,所以我来这里寻求帮助

吼叫我的代码以尝试检测某些错误或缺少某些内容:

_查看\u按钮\u 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>
client.rb(hook)

有什么建议吗

更新:

新日志

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)
第一。在js代码中

$.ajax("/projects/:id/repository/:branch");
您需要插入而不是
:id
项目标识符,而不是
:branch
分支id或分支名称(我不知道控制器需要什么)


第二。您需要正确地传递参数,因为我没有在日志中看到任何参数。我看到的参数取自url
参数:{“id”=>“:id”,“repository\u id”=>“:branch”}
。如何通过ajax传递参数,你可以通过谷歌搜索。例如,您可以查看并查找。

我已按照您的建议更改了约会,但也不起作用。尽管错误已经消失,但在我按下按钮后,该函数仍然未调用。我更新了问题,将新日志放在问题的底部。看起来一切正常。您的ajax请求调用
RepositoriesController#show
您应该在操作
{“id”=>“b1309”,“repository\u id”=>“b1309i11”}
中获得此参数。现在您可以在这里编写逻辑并返回
js.erb
例如,为什么ajax请求调用RepositoriesController#show?有没有办法调用我为这个按钮编写的函数exec_函数?我想是因为您的
CallExec
js函数调用
$.ajax(“/projects/:id/repository/:branch”)
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)
$.ajax("/projects/:id/repository/:branch");