【问题标题】:Rails 3.1 - calling AJAX request twiceRails 3.1 - 两次调用 AJAX 请求
【发布时间】:2011-11-24 15:56:10
【问题描述】:
<%=link_to 'Add note', {:controller => 'home', :action => 'add_note', :id =>user.id}, :remote => true%>

点击此链接后称为页面_add_note.html.erb(通过JS add_note.js.erb)。该文件如下所示:

$('div#ajax_div').html("<%= escape_javascript(render('add_note')) %>");

看起来不错,点击上面的链接后加载到ajax_div文件_add_note.html.erb的一个内容。

但问题是,点击我在 Firebug 中看到的链接后,ajax 调用被处理了两次。

GET /home/add_note?id=39 200 OK 601ms   
GET /home/add_note?id=39 200 OK 1154ms

这怎么可能?有什么问题?

【问题讨论】:

  • 所有其他 javascript 和 Ajax 行为是否正常?也许您以某种方式包含了 rails.js 两次,将链接处理程序分配了 2 次?
  • 实际上,我不明白 Rails 3.1 中的资产是如何工作的。因为在 /app/assets/javasripts 我只有文件 application.js,它是空的,在 application.html.erb 我有 。如果我查看 HTML 页面的来源,我会看到 和 。但在我的目录中,这些文件不是。
  • 查看 the assets pipeline 上的文档,这是 Rails 3.1 的新内容。 jQuery 和 UJS javascripts 通过 gems 包含,可以在您的Gemfile 中看到。但不幸的是,如果您看到的所有 javascript 包含是这两个文件,则可能不是任何处理程序被包含 2x 的问题。
  • 这很奇怪......相同的代码在 Rails 3 的项目中运行良好。

标签: javascript ajax ruby-on-rails-3 jquery ruby-on-rails-3.1


【解决方案1】:

这可能与资产管道有关,尽管 asset pipeline documentation 在这里不是很有用。您可能在资产路径中包含了两次 application*.js.*。运行:

$ find . -name "application*.js*"
./app/assets/javascripts/application.js
./public/assets/application.js
./public/assets/application-5f5e14d05ab99cac084b66cb87bbeec8.js
./public/assets/application-5f5e14d05ab99cac084b66cb87bbeec8.js.gz
./public/assets/application-95fca227f3857c8ac9e7ba4ffed80386.js.gz
./public/assets/application-95fca227f3857c8ac9e7ba4ffed80386.js
./public/assets/application.js.gz

如果看到如上图,删除public/assets中生成的资产。

【讨论】:

    【解决方案2】:

    当你包含 js 两次时它会调用两次

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 2014-09-19
      • 2016-10-20
      • 1970-01-01
      相关资源
      最近更新 更多