AJAX和jQuery动态加载数据的实现方法


Posted in Javascript onDecember 05, 2016

什么是AJAX?

这里的AJAX不是希腊神话里的英雄,也不是清洁剂品牌,更不是一门语言,而是指异步Javascript和XML(Asynchronous JavaScript And XML),这里的XML(数据格式)也可以是纯文本(Plain Text)或是JSON。简单的说,就是使用XMLHttpRequest对象和服务器端交换数据(以XML或是JSON等格式),使用JavaScript处理数据并更新页面内容。

AJAX和jQuery动态加载数据的实现方法

为什么要使用AJAX?

借助AJAX,我们可以实现:

在不重载页面的情况下,向服务器发送请求;

动态加载数据,即在后台交换数据。

比方说,一个便签本应用,当你在表单里填写好内容,点击新建,这时不会有页面跳转,内容即时更新,数据在后台写入数据库。

AJAX让Web APP更像是APP。

使用jQuery实现AJAX

使用jQuery可以简化这个过程。下面是一个简单的例子,在两个输入框里输入数字,按下计算按钮,JavaScript发送数据,在sever端(视图函数)获取数据,将两个数相加的结果返回,JavaScript获取返回的数据并将其显示在页面上。

1、加载jQuery

把jQuery放到static文件夹,然后加载它:

<script src="{{ url_for('static', filename='jquery.js') }}"></script>

或是从CDN加载(你可能需要更换其他站点提供的CDN资源):

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

2、设置url变量

在jQuery里没法使用url_for函数获取地址,所以我们使用request设置一个动态的全局变量:

<script type=text/javascript>
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
</script>

两个输入框,一个按钮:

<h1>Add Two Number</h1>
<p>
<input type="text" size="5" name="a"> +
<input type="text" size="5" name="b"> =
<span id="result">?</span>
</p>
<button id="calculate">Calculate!</button>

3、使用getJSON方法发送和获取数据

<script type=text/javascript>
$(function() {
$('a#calculate').bind('click', function() {
$.getJSON($SCRIPT_ROOT + '/calculate', {
a: $('input[name="a"]').val(),
b: $('input[name="b"]').val()
}, function(data) {
$("#result").text(data.result);
});
return false;
});
});
</script>

$.getJSON(url, data, func)发送一个GET请求,其中url是你要处理数据的视图函数的url,data是返回的数据,func是处理数据的函数。

JSON是JavaScript Object Notation(JavaScript对象表示法)的缩写,一种数据格式,形态上类似Python的字典,以键值对的形式存储数据(符号也是大括号)。

4、获取、处理并返回JSON数据的视图函数

from flask import Flask, jsonify, render_template, request
app = Flask(__name__)
@app.route('/calculate')
def add_numbers():
a = request.args.get('a', 0, type=int) # 第二个参数作为默认值
b = request.args.get('b', 0, type=int)
return jsonify(result=a + b)
@app.route('/')
def index():
return render_template('index.html')

使用Flask提供的jsonify()函数返回JSON数据。

这个例子改编自Flask官方的例子,完整的源码见:https://github.com/pallets/flask/blob/master/examples/jqueryexample

Javascript 相关文章推荐
javascript 类定义的4种方法
Sep 12 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
详解addEventListener的三个参数之useCapture
Mar 16 Javascript
jQuery验证元素是否为空的两种常用方法
Mar 17 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 Javascript
JavaScript几种数组去掉重复值的方法推荐
Apr 12 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
Dec 27 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
Mar 09 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
原生javascript制作的拼图游戏实现方法详解
Feb 23 Javascript
Javascript中字符串replace方法的第二个参数探究
Dec 05 #Javascript
解析预加载显示图片艺术
Dec 05 #Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
Dec 05 #Javascript
简单几步实现返回顶部效果
Dec 05 #Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
Dec 05 #Javascript
jquery删除数组中重复元素
Dec 05 #Javascript
jQuery动态增减行的实例代码解析(推荐)
Dec 05 #Javascript
You might like
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
js中eval详解
2012/03/30 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
python实现桌面气泡提示功能
2019/07/29 Python
请说出几个常用的异常类
2013/01/08 面试题
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
婚礼主持结束词
2014/03/13 职场文书
保研推荐信
2014/05/09 职场文书
2014年教育工作总结
2014/11/26 职场文书
药品销售内勤岗位职责
2015/04/13 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
四大名著读书笔记
2015/06/25 职场文书