jquery - 使用 JQuery 和 Rails 生成链接预览

标签 jquery ruby-on-rails json respond-with

我感兴趣的是在 JQuery 和 RoR 中实现链接预览工具的基本版本(类似于 Facebook 的)。用户在输入字段中键入 URL。 jquery 函数监视输入的内容(使用 keyup),当输入有效的 url 时(用户无需提交任何内容),jquery 函数调用 Rails 函数,该函数使用 Nokogiri gem 搜索并返回预览内容(例如标题) 、任何图像等)。然后该内容返回到 jquery 函数并显示在输入框下方。

在这一切中,我不清楚数据是如何从 jquery 函数传递到 Rails 函数并返回的。

为了让事情具体化,假设我只想检索正在键入的网址的标题。

在我的 JQuery 函数中,我使用 keyup 来监视空格、回车等内容。此时,我没有验证输入的 url(我可以稍后验证)

var text; 

$("#text").keyup(function(e) {

    if(e.which == 13 || e.which == 32 || e.which == 17 || ) {

        text = $("text").val();
        $.get('/linkPreview', {text: text}, function(answer) {

            $("previewTitle").html(answer);
        }           
            )
    }

这是我不确定如何继续的地方。我正在使用 .get Jquery 方法(这是正确的方法吗?)来调用 Rails 函数,并将文本作为键入的 url 传递。

然后,我将“/linkPreview”与我的页面 Controller 和路由文件中的 linkPreview 操作进行匹配:

match '/linkPreview', :to => 'pages#linkPreview'

我也不确定如何在 Rails 函数中读取和传递 JSON 数据。我正在尝试使用 respond_to 和 respond_with 函数,但不确定这是否正确(我使用 Nokogiri gem 从 url 的 html 中提取标题):

def linkPreview
    respond_to :json
@url = params[:text]
doc = Nokogiri::HTML(open(@url))
@title = doc.css(title)
respond_with(@title)
end

由于我是 RoR 和 JQuery 的新手,因此我非常感谢任何有关从 JQuery 调用 Rails 函数的正确方法、将 JSON 数据从一个传递到另一个的帮助,以及我解决这些主题的任何其他资源!我还想知道是否有任何推荐的方法来调试有缺陷的脚本(我的代码显然不起作用,但我不知道从哪里开始寻找错误)。

非常感谢!

最佳答案

我知道这是一个老问题,但是我设法让以下代码正常工作:

Controller .rb

def linkpreview
    url = params[:url]
    preview = LinkPreviewParser.parse(url) # returns a Hash
    respond_to do |format|
        format.json { render :json => preview }
    end
end

应用程序/模型/link_preview_parser.rb

class LinkPreviewParser
  def self.parse(url)
    doc = Nokogiri::HTML(open(url))
    page_info = {}
    page_info[:title] = doc.css('title').text
    return page_info
  end
end

路线.rb

match '/linkpreview', to: 'items#linkpreview'

linkpreview.js

$(document).ready(function() {
  $("#url-submit").on('click', function() {
    var link = $("#url");
    setTimeout(function() {
      var text = $(link).val();
      // send url to service for parsing
      $.ajax('/linkpreview', {
        type: 'POST',
        dataType:'json',
        data: { url: text },
        success: function(data, textStatus, jqXHR) {
          $("#item_title").val(data['title']);
        },
        error: function() { alert("error"); }
      }); 
    }, 100);
  });
});

关于jquery - 使用 JQuery 和 Rails 生成链接预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854866/

相关文章:

javascript - 如何使用 javascript 或 jQuery 使用标签内已知的 html 内容查找标签的 ID?

javascript - 为什么节点被chrome覆盖时没有触发点击事件

ruby-on-rails - 并发部署时的 Rails3 ActiveRecord 迁移

javascript - 如何以正确的方式获取所有数据 firebase-real-time-database JavaScript

使用 AND 多个同级的 Jquery 选择器

javascript - bootstrapSwitch 未正确显示

ruby-on-rails - 无法在 Windows 7 上安装 Rmagick 和 Imagemagick

ruby-on-rails - 如何使用 change_column 在 rails migration postgres 中使用 hstore 生成正确的 sql

php - 使用ajax过滤一些数据后刷新页面时获得相同的内容

javascript - 在 Ext 中使用 XTemplate 和 SimpleStore