考虑如下需求:

1. 用户输入一个用户名,当焦点跳出文本框时,检查该用户名是否有效

2. 动态更新检查的结果

我们使用ajax的方式来实现这个简单的功能,首先建立view:check.html.erb:

<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "rails" %>
<%= stylesheet_link_tag 'user' %>

<h1>check user name</h1>

<script>
var xml_http = null;
function set_xml_http()
{
	if(!xml_http && typeof XMLHttpRequest != "undefined")
		xml_http = new XMLHttpRequest();
}

function start_request()
{
	//var name = $("#name").value;
	var name = document.getElementById("name").value;
	if(name != "")
	{
		set_xml_http();
		var url = "/users/check_name?username="+name;
		xml_http.open("GET",url,true);
		xml_http.onreadystatechange = request_handle;
		xml_http.send(null);
	}
	else
		document.getElementById("info").innerHTML = "你还没有输入name哦!"
}

function request_handle()
{
	if(xml_http.readyState < 4)
		info.innerHTML = "正在检查name是否合法..."
	else if(xml_http.readyState == 4)
	{
		if(xml_http.status == 200)
			info.innerHTML = xml_http.responseText;
	}
	else
		alert("错误:请求页面异常!")
}
</script>

<%= text_field_tag("name","",onchange:"start_request()")%>
<span id="info"></span>

不知道上述代码为毛不能使用jQuery!?暂且放一边吧...接着我们来写服务器对应的check_name方法:

def mk_color(color,txt)
    "<span class=#{color}>#{txt}</span>"
  end

  def check_name
    name = params[:username]
    if name.size <= 6
      render text:mk_color("red","#{name} 长度必须大于6个字节")
    elsif name =~ /fk|fuck|shit/
      render text:mk_color("red","#{name} 不能包含不和谐单词")
    else
      render text:mk_color("green","#{name} 可以使用")
    end

  end

如果name有效则返回绿色文字,否则返回红色文字;这个可以通过css来实现,对应的css如下:

.red {

color:red

}

.green {

color:green

}

别忘了还要加路由啊:

get 'users/check' => 'users#check'
get 'users/check_name' => 'users#check_name'

代码流大致如下:首先用户访问localhost:3000/users/check页面,然后输入用户名,当焦点离开文本框时,调用start_request方法;该方法首先建立一个xml_html对象(不考虑浏览器为ie情况,否则还得加一坨代码),该方法在safari和firefox测试有效。接着通过xml_html向check_name Action发送请求,随后注册一个回调函数request_handle;当请求返回时就会执行回调函数,该函数将结果实时动态的插入info对象。

rails应用ajax之一:使用纯js方法的更多相关文章

  1. 纯js实现复制到剪贴板功能

    在网页上复制文本到剪切板,一般是使用JS+Flash结合的方法,网上有很多相关文章介绍.随着 HTML5 技术的发展,Flash 已经在很多场合不适用了,甚至被屏蔽.本文介绍的一款JS插件,实现了纯J ...

  2. Ajax,纯Js+Jquery

    AJAX:Asynchronous Javascript and xml 异步,Js和Xml 交互式网页开发 不刷新页面,与服务器交互 详情请参照Jquery工具指南用在浏览器端的技术,无刷新,通过X ...

  3. 纯js实现瀑布流布局及ajax动态新增数据

    本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax ...

  4. 纯JS画点、画线、画圆的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 纯 js 让浏览器不缓存 ajax 请求

    开发「bufpay.com 个人即时到账收款平台」支付页面需要用到 ajax 轮询订单的支付状态. 现在浏览器对 ajax 的缓存策略遵循 http response header 里面的缓存设置,为 ...

  6. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  7. js进阶 14-1 jquery的ajax系列中的load方法的作用是什么

    js进阶 14-1 jquery的ajax系列中的load方法的作用是什么 一.总结 一句话总结:jQuery load()方法作用是从服务器加载数据,是一个简单但强大的AJAX方法. 1.load函 ...

  8. 纯JS前端分页方法(JS分页)

    1.JS分页函数:开发过程中,分页功能一般是后台提供接口,前端只要传page(当前页码)和pageSize(每页最大显示条数)及对应的其他查询条件,就可以返回所需分页显示的数据. 但是有时也需要前端本 ...

  9. jQuery+AJAX实现纯js分页功能

    使用jQuery的AJAX技术,在bootstrap的框架下搭建的纯js分页 bootstrap作为Twitter推的一款前端框架,效果个人还是觉得很不错的.这次只是拿来作为网页元素的css样式表使用 ...

随机推荐

  1. Dynamics CRM 报表导出EXCEL 列合并问题的解决方法

    CRM中的报表导出功能提供了多种格式,excel就是其中之一,这次遇到的问题是导出后打开excel列明合并的问题,具体如下看着相当不美观,物料名称字段占了AB两列,品牌占了CD两列等等. 该问题的源头 ...

  2. UNIX环境高级编程——互斥量属性

    互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为.缺省的互斥锁属性及其值如下: pshared:         PTHREAD_PROCESS_PRIVATE type:           ...

  3. MySQL 数据库开发的 36 条军规

    MySQL 数据库开发的 36 条军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 ...

  4. Android5.1设备无法识别exFAT文件系统的64G TF卡问题

    64G TF卡刚买回来的时候默认exFAT文件系统,在电脑端(XP和WIN7)可以识别,但在我们Android5.1S设备无法识别,采用guiformat工具格式化为FAT32文件系统后才可以正常识别 ...

  5. iOS中大流中的自定义cell 技术分享

    AppDelegate.m指定根视图 self.window.rootViewController = [[UINavigationController alloc] initWithRootView ...

  6. CSS House

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Cocos2D:塔防游戏制作之旅(二)

    一个象牙塔的视图 如果你并不熟悉此类型的游戏,塔防游戏是一个战略游戏,你需要购买和将武装塔放置在战略位置,去阻止一波又一波的敌人到达并摧毁你的基地 每一波敌人都更强,这些更强的对手有着更快的速度和对于 ...

  8. Oracle R12 多组织访问的控制 - MOAC(Multi-Org Access Control)

    什么是MOAC MOAC(Multi-Org Access Control)为多组织访问控制,是Oracle EBS R12的重要新功能,它可以实现在一个Responsibility下对多个Opera ...

  9. C语言通讯录管理系统

    本文转载自:http://blog.csdn.net/hackbuteer1/article/details/6573488 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能. ...

  10. Android平台 Psensor传感器调试方法

    一. 驱动层调试1.在板级dts文件中增加相应的dts代码,如:调试sensor类,在代码中找到已经有的代码在修改,I2C使用那根(一般为I2C3),I2C地址(找datasheet或者FAE),哪个 ...