Node.js配合jQuery UI autocomplete的应用
Node.js擅长的领域为:
- 不需要很多运算
- 吞吐量要求高
- 进消息轻并且要求快
- 出消息轻并且要求快
网上的例子都是socket.io的,我一直在想到底能用在什么地方?根据node.js的优点(擅长领域),想出了这个应用场景:
jQuery UI的autocomplete应用场景,这个需要的数据都是很零碎却量多的。
结构如下:
- 用ASP.NET MVC4新建一个web站点,在这里编写jQuery UI autocomplete代码
- 用WebMatrix编写Node.js代码(主要是基于express的路由)
由于这2个都是独立的站点,因此涉及到跨域问题,使用JSONP解决(其实在js代码调用和node.js端都要修改相应的代码)。
先贴ASP.NET MVC4的代码
<head>
<title></title>
<link href="jqueryui/css/ui-lightness/jquery-ui-1.10.3.custom.css" rel="stylesheet"
type="text/css" />
<script src="jqueryui/js/jquery-1.9.1.js" type="text/javascript"></script>
<script src="jqueryui/js/jquery-ui-1.10.3.custom.js" type="text/javascript"></script>
<script>
$(function () {
$("#searchKey").autocomplete({
source: function (request, response) {
$.ajax({
type: "get",
async: false,
url: "http://localhost:22912/users/" + request.term, //这里是Node.js的url
dataType: "jsonp",
success: function (data) {
response($.map(data, function(item){
return {label: item.UserName,value: item.UserName}
}
)//转换成label, value形式,以便UI中显示
);
},
error: function () {
alert('fail');
}
});
}
});
});
</script>
</head>
<body>
<input id="searchKey" size="50" />
</body>
然后建立Node.js程序,先看看WebMatrix的新建Node.js Dialog:
新建后,会看到一堆文件建立了,先看看server.js入口文件,再看路由文件:
var express = require('express') //导入express模块
, http = require('http') //导入http核心模块
, path = require('path') //同上
, routes4users = require('./routes/users'); //导入自己编写的users路由模块 var app = express(); app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views'); //存放视图的文件夹,和asp.net mvc类似用途
app.set('view engine', 'jade'); //类似于asp.net mvc的razor,不过jade语法不同,并且接近于coffeescript那样采用缩进
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
}); app.configure('development', function(){
app.use(express.errorHandler());
}); app.get('/users/:name', routes4users.users_getCollectionByName);
//类似于asp.net mvc中的路由,mvc下为:{controller}/{action}/{id},Node.js中用:前缀为参数
//routes4users.users_getCollectionByName是我们要编写的主要处理函数
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
看看users.js文件:
function UserInfo()
{
this.UserName = null;
this.Age = -1;
} var users = new Array(); //模拟数据库
for (var i = 0; i < 10; i++) { //加入数据
var u=new UserInfo();
u.UserName = "aaron" + i;
u.Age = i;
users.push(u);
} exports.users_getCollectionByName = function (req, res) { //server.js中,路由/users/:name的对应函数
var searchKey = req.params.name; var result = new Array();
for (var i = 0; i < users.length; i++) {//模拟搜索逻辑
if (users[i].UserName.indexOf(searchKey) >= 0) {
result.push(users[i]);
}
}
var callbackFunctionName = req.query.callback;//jQuery的JSONP调用会设置这个参数,通过querystring的方式传过来 res.setHeader('Content-Type', 'application/javascript; charset=utf-8');
var str = JSON.stringify(result);
str = callbackFunctionName+"(" + str + ")";//这句很重要
res.send(str);
}
运行效果图:
Node.js配合jQuery UI autocomplete的应用的更多相关文章
- JQuery UI Autocomplete与jquery.autocomplete.js
程序中要把一个select改成可以下拉搜索的,就想到了使用下autocomplete.js大概是这么个东西. 问了下同学,推荐我使用Jquery Ui autocomplete,下载下来开始调试使用, ...
- jquery ui autocomplete 实现点击文本框,出现所有查询信息效果,与bootstrap结合使用修改样式
直接看代码 <!doctype html> <html lang="en"> <head> <meta charset="utf ...
- jQuery UI Autocomplete Combobox 配 ASP.NET DropDownList
0.引言 1.起因 一开始使用Autocomplete做了一个自动补全的文本框,如上图.后来因业务需要希望能在这个文本框的边上做个下拉列表按钮,一按就展开所有支持 ...
- jQuery UI Autocomplete是jQuery UI的自动完成组件
支持的数据源 jQuery UI Autocomplete主要支持字符串Array.JSON两种数据格式. 普通的Array格式没有什么特殊的,如下: ? 1 ["cnblogs" ...
- jQuery ui autocomplete下拉列表样式失效解决,三种获取数据源方式,
jQuery有很多很多的已经实现,很漂亮的插件,autocomplete就是其中之一.jQuery ui autocomplete主要支持字符串Array.JSON两种数据格式,jQuery ui b ...
- 可输入自动匹配Select——jquery ui autocomplete
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- jQuery.ui autoComplete使用
官网 http://api.jqueryui.com/autocomplete/#option-source 参考了 http://www.cnblogs.com/lwme/archive/2012 ...
- jquery UI autocomplete当输入框焦点聚焦时自动弹出跟随下拉框
$("#search").autocomplete({ minLength: 0, source: function(request,response){ // request对象 ...
- jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
转:http://www.cnblogs.com/wiseant/p/4553837.html 最近在一个ASP.NET MVC5项目中使用Bootstrap的模态窗(弹出层)来让用户填写内容,其中的 ...
随机推荐
- 自定义View类
一.如何创建自定义的View类 ①.创建一个继承android.view.View类的Java类,并且重写构造方法(至少需要重写一个构造方法) ②.根据需要重写其他方法 ③.在项目的活动中,创建并实例 ...
- Jmeter-测试计划,线程组,取样器,逻辑控制器,断言和监听器
一 测试计划: 是使用jmeter测试的起点,是其他测试元件的容器,一个完整的测试计划包括多个线程组,逻辑控制器,取样器,监听器,配置元件 用户定义的变量: 测试计划上可以添加用户定义的变量.一般添加 ...
- C# 如何使用 Elasticsearch (ES)
Elasticsearch简介 Elasticsearch (ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好 ...
- Linux平台下RMAN异机恢复总结
下面总结.整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,直到最近偶然被翻看到,遂整理.总结一下.如下所示,个人将整个RMAN异机恢复分为准备工作和操作步骤两大部分.当然,准 ...
- c#判断两个对象和对象中的属性是否相同(以及记录对象中的哪些字段,和详细的改变情况)
当前项目需要记录变更记录,即用户在进行编辑后,将变更操作记录下来.但是数据没有发生变化,则不记录. 代码1:(仅仅返回是否变化的标识) /// <summary> /// 反射对比实体属性 ...
- php学习----文件系统
PHP文件系统之读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $content = file_get_ ...
- html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题
先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html ...
- Java Native Interface(JNI)
JNI能让Java代码在Java虚拟机里调用其他编程语言(例如C.C++)写的应用或库,且不会影响任何Java虚拟机的实现. 什么时候用JNI? 1.应用程序所需的平台相关功能,标准的Java类库不支 ...
- MySQL大小写敏感的解决方案
前言:对于MySQL的大小写敏感的影响,笔者在一个小项目中深刻的体会到:当想要查询一条数据时,总是出来两条或多条,后来发现是大小写敏感造成的原因,本文就该问题提出解决方案. 1.MySQL大小写敏感的 ...
- 一款国内好用的Linux发行版?Deepin(深度)Linux
一款国内好用的Linux发行版?Deepin(深度)Linux 目前来说,要将Linux作为桌面解决方案,对于大多数PC用户来说,当然是不现实的,毕竟Linux的主力用户群体依然是少数极客用户.说白了 ...