【问题标题】:Rails 3.1 Ajax: Why doesn't my link_to's with :remote => true generate a JS request?Rails 3.1 Ajax:为什么我的带有 :remote => true 的 link_to 不生成 JS 请求?
【发布时间】:2013-03-13 20:01:49
【问题描述】:

我正在将 Ajax 实施到我现有的 Rails 3.1 应用程序中。我正在与Samnang Chhun's excellent tutorial 进行比较——他的作品,我的没有。

这是我的链接:

<%= link_to('Do some Ajax!', @activity, :remote => true) %>

这是我的控制器:

class ActivitiesController < ApplicationController

  respond_to :html, :js

  # ...

  def show
    @activity = Activity.find(params[:id])
    respond_with @activity
  end

  # ...

end

我的views/activities 文件夹包含show.html.erbshow.js.erb

更新:这是我包含的 JavaScript 文件:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/activities.js?body=1" type="text/javascript"></script>
<script src="/assets/add2home.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.dropdownPlain.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

当我点击它时,页面刷新,一个直接的 HTML 请求,也被服务器输出验证(见第 2 行):

Started GET "/activities/18-leka-titta-pa-mig" for 127.0.0.1 at 2013-03-13 20:58:43 +0100
  Processing by ActivitiesController#show as HTML
  Parameters: {"id"=>"18-leka-titta-pa-mig"}
  Activity Load (0.4ms)  SELECT "activities".* FROM "activities" WHERE "activities"."id" = $1 LIMIT 1  [["id", "18-leka-titta-pa-mig"]]
WEBSITE: Babycenter.com
  Tag Load (0.8ms)  SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = 18 AND "taggings"."taggable_type" = 'Activity'
Rendered layouts/_footer.html.erb (0.6ms)
Rendered activities/show.html.erb within layouts/application (63.4ms)
Rendered layouts/_facebook_sdk.html.erb (0.1ms)
Rendered activities/_filter_tabs.html.erb (3.1ms)
Completed 200 OK in 107ms (Views: 79.8ms | ActiveRecord: 21.6ms)

我做错了什么?

【问题讨论】:

  • 中是否包含任何 javascript?
  • 是的,请参阅上面的更新帖子。
  • @TomSöderlund,给出的答案是否解决了您的问题?
  • @zeantsoi 不,还没有。
  • 现在找到了,请看下面的答案。

标签: ruby-on-rails ajax ruby-on-rails-3.1


【解决方案1】:

您正在寻找 jquery UJS 挂钩 - https://github.com/rails/jquery-ujs

【讨论】:

  • 实际上这些钩子都包含在头部中。可能缺少的是jquery-rails gem。
  • gem 'jquery-rails' 在我的 Gemfile 中。
  • 一条消息:Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings. It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains. 消息来源是oauth:1
  • 我认为上述消息来自 Facebook SDK。
【解决方案2】:

我偶然发现了这个问题。原来我使用了一个旧的 JavaScript sn-p 来禁用 iOS Safari 在新窗口中打开链接。该脚本与 Rails 3 的 Ajax 方式不兼容。

通过用 iPhone Safari Web App opens links in new window 的最新版本替换脚本,我让它工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多