【问题标题】:How to run Twitter gem after page loads页面加载后如何运行 Twitter gem
【发布时间】:2011-11-10 08:12:22
【问题描述】:

我使用的是Twitter gem,但我希望了解如何在页面加载后在后台运行它。

目前我需要等待页面呈现,因为 gem 正在查询一些推文。一旦 gem 得到响应,页面就会加载。

但是,我希望在我的 Twitter 提要“div”标签中显示一个“正在加载”的 GIF,一旦检索到 Twitter 信息,就用相应的内容替换这个 GIF。

我阅读了几篇文章如何使用表单和表单上的“:remote => true”标签,以便进行不会重新加载相应页面的 AJAX 调用,但我不想强迫访问者点击链接以查看 Twitter 推文。

我正在使用:

  • Ruby 版本:1.8.7
  • Rails 版本:3.0.9

【问题讨论】:

    标签: ruby-on-rails ajax twitter


    【解决方案1】:

    有多种方法可以做到这一点;一个相当普遍的做法和我要解决的方法是使用 jQuery 的 $.ajax() 从服务器获取数据并更新页面。

    客户端:

    1. 正常加载页面并显示某种加载指示器。

    2. 拨打$.ajax():

      $.ajax({
        type: "GET",
        url: userId + '/tweets', // i.e. tweets is a nested resource of user
        success: function(tweets){
          $('#loading_indicator').hide();
      
          // Use the tweets that are returned to update the DOM
          $.each(tweets, function(ndx, tweet) {
            $('#tweet_list').append('<li>'+tweet.body+<'/li'>);
          });
        }
      });
      

    服务器端:

    在控制器中有一个动作,以 JSON 格式发送推文以供客户端 success 回调使用。设置此操作的路由以与 $.ajax() 中的 url 兼容:

    class TweetsController < ApplicationController
    
      def show
        # collect tweets...
        render :json => @tweets
      end
    
    end
    

    【讨论】:

    • 感谢您的回复!就像我在描述中提到的那样,我真的很喜欢 RoR。什么叫控制器的“显示”逻辑?另外,我是否将客户端 AJAX 代码放在 application.js 文件中?除了实现所有这些之外,我还试图在客户端和服务器代码之间连接众所周知的点。再次感谢!!
    • AJAX 调用点的“URL”部分是否会激活控制器中的“show”方法,即 routes.rb 文件将包含来自 user/tweets => tweets 的“匹配”#显示?
    • 如果您使用 RESTful 路由 See routing guide'show' 对应于 GET 操作。 AJAX 的 URL 部分可以指向任何东西,只要你有一个响应它的路由设置。运行 rake routes 以获取应用程序使用的路由列表,或使用 curl [URL] 查看从 URL 返回的内容。
    • 感谢您的精彩反馈!但是,我想我被困住了。我在日志中注意到如何调用控制器的方法,在您的示例中为“显示”,但从未调用 AJAX 函数中的“成功”设置逻辑。作为测试,我添加了“alert('I'm in the AJAX call');”这一行。就在“成功”设置“左括号”之后,在“$('#loading_indicator').hide();”之前行,并且没有出现警告框。我确保 AJAX 调用所调用的函数返回“render :json => @tweets”,而 @tweets 只是被分配了一个字符串,用于测试目的。
    • 为了进一步调试,我在 AJAX 调用中添加了一个错误函数。似乎我得到了一个“parseError”,原因是“Unexpected token ILLEGAL”。我该如何解决这个问题?正如我之前提到的,我的方法只是在“render :json => @tweets”行之前将“字符串”分配给“@tweets”变量
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2014-06-19
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2013-09-15
    • 2013-03-28
    • 2023-03-11
    相关资源
    最近更新 更多