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 相关文章推荐
Firefox getBoxObjectFor getBoundingClientRect联系
Oct 26 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
用Javascript实现Windows任务管理器的代码
Mar 27 Javascript
javascript数组的使用
Mar 28 Javascript
JavaScript中的Web worker多线程API研究
Dec 06 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
Mar 30 Javascript
JavaScript检查数字是否为整数或浮点数的方法
Jun 09 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
Feb 14 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
vue实现路由懒加载的3种方法示例
Sep 01 Javascript
原生JavaScript实现幻灯片效果
Feb 19 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文件操作的详解
2013/06/05 PHP
php提取字符串中网站url地址的方法
2014/12/03 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
Vue header组件开发详解
2018/01/26 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
python使用cookielib库示例分享
2014/03/03 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
python os模块简单应用示例
2019/05/23 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
《燕子》教学反思
2014/02/18 职场文书
挂靠协议书范本
2014/04/22 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
经理任命书模板
2014/06/06 职场文书
2014年客房部工作总结
2014/11/22 职场文书
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS
el-table-column 内容不自动换行的解决方法
2022/08/14 Vue.js