在rails中使用jquery实现Ajax

简介:
在rails中使用jquery实现Ajax
下面通过一个实例来讲解如何在Rails用jquery实现Ajax式的添加和删除操作.
我的环境:
ruby187,rails 222, jquery1.3.2 jquery.form.js

首先新建rails应用
rails app -d mysql
新建数据库app_development
script/generate model product name:string
script/generate controller products index
rake db:migrate


把jquery.js和jquery.form.js放到public/javascripts目录下

编辑app/app/views/layouts/application.html.erb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    <title>Application</title>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
      <title>index</title>
      <%= javascript_include_tag "jquery" %>
      <%= javascript_include_tag "jquery.form" %>
      <%= javascript_include_tag "application" %>
    
</head>

<body>

    <%= yield %>

</body>
</html>

在products_controller.rb中定义下面几个action:


class ProductsController < ApplicationController
  def index
      @products = Product.find(:all)
  end

  def create
    if Product.create(params[:product]).valid?
      @products = Product.find(:all)
      render :partial => "products_list"
    else
      render :text => "something  wrong", :status => "500"
    end
  end

  def delete
    Product.destroy(params[:id])
    @products = Product.find(:all)
    render :text => ""
  end
  
end


编辑app/app/views/products/index.html.erb
<% form_for :product, :html=>{:method=>"post",:id=>"create-product"}, :url=>{:controller=>"products", :action=>"create"} do |f|%>
<label>Product Name:<%= f.text_field :name %></label>
<%= submit_tag "submit" %>
<% end %>

<div id="products-list">
  <%= render :partial => 'products_list'%>
</div>


编辑app/app/views/products/_products_list.erb
<% unless @products.empty? %>
<table>
    <tr>
        <th><b>Product Name</b></th>
    </tr>
    <% @products.each do |product| %>
    <tr>
        <td>
        <%= product.name%>
        </td>
        <td><%= link_to "Delete", {:controller=>"products", :action=>"delete",:id=>product}, :class=>"delete"%></td>
        <td>Edit</td>
    </tr>
    <% end %>
</table>
<% end %>


编辑public/javascripts/application.js
DeleteProduct()是用jquery实现的ajax方式.
CreateProduct()用到了jquery.formAjax提交方式

$(document).ready(function() {
    function DeleteProduct() {  //定义删除函数
      $('#products-list a.delete').bind('click', function() { //将delete链接与click绑定
        var deleteLink = $(this)   //将这个链接的dom赋值给deleteLink变量
        $.ajax({        //Ajax函数
          type: 'delete',    //定义http方法
          url: deleteLink.attr('href'),     //请求的URL
          success: function(){deleteLink.parent().parent().remove()}  //请求成功之后的动作
        })
        return false //阻止普通的提交方式 和页面导航

      })
    }

    function CreateProduct() { //添加product函数
      $('#create-product').submit(function() { //点击submit的函数
        $(this).ajaxSubmit({ //点击submit发起ajax请求
          target: '#products-list',   //目标是对id=product0list的dom进行局部更新
          clearForm: true, 
          success: DeleteProduct,  
          error: displayError //发生错误,譬如validate?为false时
        })
        return false
      })
    }

    function displayError(request, errorType) {
      var msg = '<div class="error">'+request.responseText+'(click to close)</div>'
      $('#products-list').append(msg)
      $('.error').click(function(){$(this).hide()})
    }

    $(function() {
      DeleteProduct()
      CreateProduct()
    })
    
});
jquery.form.js的更多内容参阅 API

现在启动服务 script/server
就可以看到用Ajax实现的添加和删除了. 




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/141760,如需转载请自行联系原作者
目录
相关文章
N..
|
1月前
|
XML JSON 前端开发
jQuery实现Ajax
jQuery实现Ajax
N..
18 1
|
2月前
|
JavaScript 前端开发 Java
jquery ajax+spring mvc上传文件
jquery ajax+spring mvc上传文件
|
3月前
|
前端开发 JavaScript
Jquery ajax捕获错误信息
Jquery ajax捕获错误信息
16 0
|
3月前
|
JSON 缓存 前端开发
Jquery中AJAX的应用
Jquery中AJAX的应用
43 0
|
4月前
|
JSON 前端开发 JavaScript
jQuery中ajax的使用
jQuery中ajax的使用
|
4月前
|
XML JavaScript 前端开发
【Web智能聊天客服】之JavaScript、jQuery、AJAX讲解及实例(超详细必看 附源码)
【Web智能聊天客服】之JavaScript、jQuery、AJAX讲解及实例(超详细必看 附源码)
52 0
|
6月前
|
JavaScript
Jquery插件知识之Jquery.cookie实现页面传值
Jquery插件知识之Jquery.cookie实现页面传值
36 0
|
7月前
|
JavaScript
jQuery 插件自用列表
jQuery 插件自用列表
29 0
|
3月前
|
JavaScript
jQuery图片延迟加载插件jQuery.lazyload
jQuery图片延迟加载插件jQuery.lazyload
|
3月前
|
JavaScript 数据可视化 前端开发
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
jQuery-JS插件-第9次课-使用插件让领导对你刮目相看-附案例作业
19 0