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 基础问答三
Dec 03 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
纯JavaScript代码实现文本比较工具
Feb 17 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
微信小程序 倒计时组件实现代码
Oct 24 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
Dec 30 Javascript
seajs模块压缩问题与解决方法实例分析
Oct 10 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
jQuery实现表格隔行换色
Sep 01 jQuery
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
vue用BMap百度地图实现即时搜索功能
Sep 26 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/25 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
php如何连接sql server
2015/10/16 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
javascript实现表单验证
2016/01/29 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
python检测某个变量是否有定义的方法
2015/05/20 Python
python实现的守护进程(Daemon)用法实例
2015/06/02 Python
Python中防止sql注入的方法详解
2017/02/25 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
python for 循环获取index索引的方法
2019/02/01 Python
Django 拆分model和view的实现方法
2019/08/16 Python
pytorch中的inference使用实例
2020/02/20 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2016年教师节慰问信
2015/12/01 职场文书
调研报告的主要写法
2019/04/18 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
Python如何识别银行卡卡号?
2021/06/10 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js