Django1.6 + jQuery Ajax + JSON 实现页面局部实时刷新
最近微信公众帐号要扩展做一个签到系统,签到结果在一个网页上实时更新,即页面局部刷新。我想用Ajax来实现,之前公众帐号是用的Django搭的,我查找了Django的官方文档,没有封装Ajax。网上有各种方法,眼花缭乱。之前在图书馆借了本书《Django Web 开发指南》里面,有Ajax的实例,但是旧版本的Django,代码没法运行,但是里面倒是提供一种方法——把数据翻译成JSON格式,然后按照我们的格式返回字符串结果,在写到HttpResponse里去。我借鉴了其中的方法。查了Django的官方文档,我修改了书中的代码,可以正常运行。自己也写了一个demo。
我的直接简单地在views.py把数据存在一个list中,然后用JSON格式储存,写到HttpResponse中
from django.http import HttpResponse
from django.shortcuts import render_to_response
import json def data(request, id):
rlist = [['Jack', 'Chinese'], ['Mike', 'English'], ['Bob', 'Math'], ['Frank', 'Art'], ['Lucy', 'Music']]
rlist2 = []
rlist2.append({"name" : rlist[int(id)][0], "subject" : rlist[int(id)][1]})
rjson = json.dumps(rlist2)
response = HttpResponse()
response['Content-Type'] = "text/javascript"
response.write(rjson)
return response def update(request):
return render_to_response('update.html')
url.py中有两个地址,一个是展示页面,一个是数据保存地址
from django.conf.urls import patterns, url
from AjaxTest.views import data, update urlpatterns = patterns('',
url(r'^data/(?P<id>\d+)/$', data),
url(r'^update/', update)
)
访问http://127.0.0.1:8000/data/id/, id是数字,可获取对应JSON数据

这一步很关键,接下来我们编写和这个API视图交互Javascript,并用它来响应页面。我用jQuery中的ajax,每隔3秒执行一次 update() 函数,用jQuery的 getJSON 方法,发送URL请求,解析结果,这样完成Ajax,Javascript代码如下
function update(id) {
$.getJSON("/data/" + id + "/",function(data) {
$.each(data, function(){
$("#content").html('<p>' + this.name + ' is a ' + this.subject + ' teacher.</p>');
});
});
}
function timeDown(limit, i) {
limit--;
if (i > 4) {
i = 0;
}
if (limit < 0) {
limit = 3;
update(i);
i++;
}
$('#time').text(limit + '秒后刷新');
setTimeout(function() {
timeDown(limit, i);
}, 1000)
}
$(document).ready(function() {
timeDown(3, 0)
})
html页面代码
<html>
<head>
<title>Ajax Test</title>
<script src="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
function update(id) {
$.getJSON("/data/" + id + "/",function(data) {
$.each(data, function(){
$("#content").html('<p>' + this.name + ' is a ' + this.subject + ' teacher.</p>');
});
});
}
function timeDown(limit, i) {
limit--;
if (i > 4) {
i = 0;
}
if (limit < 0) {
limit = 3;
update(i);
i++;
}
$('#time').text(limit + '秒后刷新');
setTimeout(function() {
timeDown(limit, i);
}, 1000)
} $(document).ready(function() {
timeDown(3, 0)
})
</script>
</head>
<body>
<h1>Ajax Test</h1>
<p id="time"></p>
<div id="content"></div>
</body>
</html>
运行服务器,访问http://127.0.0.1:8000/update/,每隔3秒刷新一次更新内容,如下图

Demo代码下载地址
http://files.cnblogs.com/stwzhong/AjaxTest.zip
《Django Web 开发指南》书上修改后代码下载地址
http://files.cnblogs.com/stwzhong/Liveblog.zip
Django1.6 + jQuery Ajax + JSON 实现页面局部实时刷新的更多相关文章
- Jquery Ajax调用aspx页面方法
Jquery Ajax调用aspx页面方法 在asp.net webform开发中,用jQuery ajax传值一般有几种玩法 1)普通玩法:通过一般处理程序ashx进行处理: 2)高级玩法:通过as ...
- Jquery+ajax+json+servlet原理和Demo
Jquery+ajax+json+servlet原理和Demo 大致过程: 用户时间点击,触发js,设置$.ajax,开始请求.服务器响应,获取ajax传递的值,然后处理.以JSON格式返回给ajax ...
- php+jquery+ajax+json简单小例子
直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...
- 基于Jquery+Ajax+Json+存储过程 高效分页
在做后台开发中,都会有大量的列表展示,下面给大家给大家分享一套基于Jquery+Ajax+Json+存储过程高效分页列表,只需要传递几个参数即可.当然代码也有改进的地方,如果大家有更好的方法,愿留下宝 ...
- jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法
1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是“a ...
- 练习 jquery+Ajax+Json 绑定数据 分类: asp.net 练习 jquery+Ajax+Json 绑定数据 分类: asp.net
练习 jquery+Ajax+Json 绑定数据
- 如何构建ASP.NET MVC4&JQuery&AJax&JSon示例
背景: 博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax. 步骤: 1,添加控制器(HomeController)和动作方法(Index),并为Inde ...
- Jquery Ajax Json ashx 实现前后台数据传输
经过一个多星期的研究,各种查找资料终于自己实现了Jquery Ajax Json ashx 的前后台数据交流功能 首先一点,Ajax只能对应一个ashx文件,多余两个,如果打开异步传输的async: ...
- Django1.7+JQuery+Ajax集成小例子
Ajax的出现让Web展现了更新的活力,基本所有的语言,都动态支持Ajax与起服务端进行通信,并在页面实现无刷新动态交互. 下面是散仙使用Django+Jquery+Ajax的方式来模拟实现了一个验证 ...
随机推荐
- asp.net 自动检测缓存内容是否变化
1 使用cache.Insert方法时,新建一个System.Web.Caching.CacheDependency对象,告诉缓存,当缓存的内容发生变化时,将删除缓存,并重新缓存 using Syst ...
- span元素
<span>标签属于行内元素(inline),所以无法设置高度和宽度: 如果需要改变其宽高,就需要将其转变为块体元素(block)或行内块体元素(inle-block)
- easyui的combobox默认选中第一个选项
pmProjectSelect.combobox({ editable:false, width:165, url : ctx + '/PmProject/findByProjectMgr', //c ...
- 处理器拦截器(HandlerInterceptor)详解(转)
简介 SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理. 应用场景 1.日志记录,可以记录请求信息的日志,以便进行信息监控.信息统计 ...
- 【Mac】 开启原生的 NTFS 硬盘格式支持
一.MacOS 10.13 之前 二.MacOS 10.13 及之后 一.MacOS 10.13 之前 直接跳到引用地址查看,下面的草记只是为了防止链接丢失 引用地址 打开终端 切换至root身份,输 ...
- 前端基础(九):SweetAlert(弹出框)
简介 SweetAlert是一款很好用的弹出框框架 下载 点我下载 导入 博主用的是bootstrap-sweetalert,所以要依赖bootstrap,导入前先导入原生jQuery以及bootst ...
- 远程操控批量复制应用(scp/pssh/pscp.pssh/rsync/pslurp)
scp命令: scp [options] SRC... DEST/两种方式: scp [options] [user@]host:/sourcefile /destpath scp [options] ...
- Cacti-0.8.8b详细安装及配置步骤
1. Cacti环境安装 1.1 安装LAMP环境 安装LAMP环境,当然,如果你有兴趣可以采用编译,我线上Mysql是编译的,其余是yum安装的.在这次实验采用yum安装. 关闭i ...
- Python项目列表
70个Python项目列表: 1.[Python 图片转字符画]2.[200行Python代码实现2048]3.[Python3 实现火车票查询工具]4.[高德API+Python解决租房问题 ]5. ...
- sysbench库文件路径不对
#sysbench --versionsysbench: error while loading shared libraries: libmysqlclient.so .20: cannot ope ...