rails应用ajax之一:使用纯js方法

    考虑如下需求:

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对象。

时间: 2024-10-03 23:06:37

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

jquery库文件略庞大用纯js替换jquery的方法_javascript技巧

jquery库文件略庞大,在某些情况下,需要尽量减少加载的文件(文件大小),需要用纯js来编写效果 $('#layer') document.getElementById('layer') $('#layer span') var layer = document.getElementById('layer'); var span = layer.getElementsByTagName('span'); $('#inner').parent() document.getElementById(

Ajax相关的Js方法

ajax|js 增加Ajax相关的js方法,这些方法大部分是基于prototype (一个很好的 JavaScript Framework )类库来写的. 1. loadAjaxElement,loadAjaxData,sendAjaxElement,sendAjaxData这四方法都是真接Ajax操作的方法: 2. parseXML,importXML,getTextNodeValue这三个方法是对于Ajax返回结果中的xml数据的处理:如果返回结果非标准xml文档的话,可以通过parseXM

使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)_javascript技巧

在网站开发中,经常会简单使用js代码来判断字符串中有多少汉字的功能.今天小编抽时间给大家分享实现代码.废话不多说了,直接给大家贴代码了. $("form").submit(function () { var content = editor.getContentTxt(); var sum = 0; re = /[\u4E00-\u9FA5]/g; //测试中文字符的正则 if (content) { if (re.test(content)) //使用正则判断是否存在中文 { if

js+ajax实现获取文件大小的方法_javascript技巧

本文实例讲述了js+ajax实现获取文件大小的方法.分享给大家供大家参考,具体如下: 顾名思义,通过JS和Ajax来获取上传文件的大小,在上传之前可以有个判断,对上传的文件有所控制,因为js控制文件大小(JS获取文件大小)有些问题,具体大家试下就知道了,在此整理了一下ajax的获取文件大小的方法,比较好用,再调试过程中,出现了c:/fakepath/ 的错误,也将解决方案罗列在下面,以供大家参考 废话少说,代码如下 JS如下: <script language="Jscript"

纯js实现点击一个事件后,触发另外一个事件的方法

我们在日常的开发中,经常会用到,当我点击一个按钮的click事件后,我想触发另一个按钮的click事件. 这时我们该怎么做呢.用过ext的人都知道,frieEvent方法.但是在使用手机开发的时候,ext对我们的作用就不是很大了. 虽然ext5.0出来了,对手机又支持的功能需求.但是你会为了一个很小的功能,去加载整个庞大的ext.js吗.就算你会使用,你的客户会买账吗. 并不一定会吧,因为你的网站加载速度慢,浪费流量,早就被对手取代了吧. 好吧,我们就废话少说,看看纯js是怎么实现的.看代码:

通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法_javascript技巧

项目需求:如何通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端 题主用jquery接收 <input name="c_pic" id="c_pic" type="file" class="file"> 用的方法是: var input = document.getElementById("c_pic"); input.addEventListener('chang

纯js实现瀑布流布局及ajax动态新增数据_javascript技巧

本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能. 缺点: 1. 程序不是响应式,不能实时调整页面宽度: 2. 程序中当新增ajax模拟数据图片后,是将整个页面的所有图片都重新定位一次. 3. 程序是等所有图片加载完成后再读取图片的尺寸,实际中肯定不能这样做. 4. 实际项目中,应该由后台程序给出图片尺寸值,在js代码中直接使用图片的width属性.  本程序思路: html结构: <body> <div id=&quo

纯JS实现本地图片预览的方法_javascript技巧

本文实例讲述了纯JS实现本地图片预览的方法.分享给大家供大家参考.具体如下: 刚突然看到,网上已经有很多类似的代码,但没找到一个合适的.就拿自己以前写的写了一个.代码比较简洁,引用了一个我之前写的js.方法可以单独剥离出来使用,未测太多兼容.本机浏览器基本都支持(IE,FF,Chrome) index.html如下: <html> <head> <title>Test</title> <script type="text/javascript

纯js模拟div层弹性运动的方法_javascript技巧

本文实例讲述了纯js模拟div层弹性运动的方法.分享给大家供大家参考.具体如下: 特性: 1. 支持各项常数自定义 2. 理论支持所有元素,只需修改style.width,你懂得 3. 已知支持浏览器:chrome/firefox/IE7.8.9 <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <script type="te