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

相关文章
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
791 165
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
445 0
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
1936 0
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
1866 80
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
707 3
|
前端开发 搜索推荐 JavaScript
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
840 57
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
680 0
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
444 3
|
存储 JavaScript 前端开发