Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 JavaScript和XML(标准通用标记语言的子集),AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。

这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

-----传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面;

AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

Ajax工作原理:

1. 基本参数

$.ajax,这个是JQuery对ajax封装的最基础步骤,通过使用这个函数可以完成异步通讯的所有功能。也就是说什么情况下我们都可以通过此方法进行异步刷新的操作。但是它的参数较多,有的时候可能会麻烦一些。看一下常用的参数:

  var configObj = {
method //数据的提交方式:get和post
url //数据的提交路径
async //是否支持异步刷新,默认是true
data //需要提交的数据
dataType //服务器返回数据的类型,例如xml,String,Json等
success //请求成功后的回调函数
error //请求失败后的回调函数
} $.ajax(configObj);//通过$.ajax函数进行调用。

2. 实例分析

$.ajax({
url: '/host', // 数据提交地址
type: "POST", // 提交类型
data: {'k1': 123, 'k2': "root"}, // 提交的内容 字典格式
success: function(data){    // 客户端会一直等待服务端返回的数值
// data是服务器端返回的字符串
var obj = JSON.parse(data);
}
}) 建议:永远让服务器端返回一个字典
return HttpResponse(json.dumps(字典))

3. 简单的前后端交互

<div class="shade hide"></div>
<div class="add-modal hide">
<form method="POST" action="/home/">
<div class="group">
<input id='host' type="text" placeholder="主机名" name="hostname" />
</div> <div class="group">
<input id='ip' type="text" placeholder="IP" name="ip" />
</div> <div class="group">
<input id='port' type="text" placeholder="端口" name="port" />
</div> <div class="group">
<select id='sel' name="b_id">
{% for op in b_list %}
<option value="{{ op.id }}">{{ op.caption }}</option>
{% endfor %}
</select>
</div>
<input type="submit" value="提交" />
<a id="ajax_submit">要上天提交</a>
<input id="cancel" type="button" value="取消" /> </form> </div>

index.html

Ajax代码:

$(function(){
$('#ajax_submit').click(function () {
$.ajax({
url:"/test_ajax/",
type:"POST",
data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
success:function (data) {
if(data=='OK'){
location.reload() // 重新加载页面
}else {
alert(data);
}
}
})
})
})

Django代码:

def test_ajax(request):
print(request.method)
h = request.POST.get('hostname')
i = request.POST.get('ip')
p = request.POST.get('port')
b = request.POST.get('b_id')
print(h,i,p,b)
if h and len(h) > 5: # 主机名长度判断
models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b) # 创建数据
return HttpResponse("OK")    # 返回OK 严格大小写
else:
return HttpResponse("主机名太短")  # 返回错误提示

4. 对前后端交互完善(当后端有问题时,前端收不到data,页面无反应)

<div class="add-modal hide">
<form method="POST" action="/home/">
<div class="group">
<input id='host' type="text" placeholder="主机名" name="hostname" />
</div> <div class="group">
<input id='ip' type="text" placeholder="IP" name="ip" />
</div> <div class="group">
<input id='port' type="text" placeholder="端口" name="port" />
</div> <div class="group">
<select id='sel' name="b_id">
{% for op in b_list %}
<option value="{{ op.id }}">{{ op.caption }}</option>
{% endfor %}
</select>
</div>
<input type="submit" value="提交" />
<a id="ajax_submit">要上天提交</a>
<input id="cancel" type="button" value="取消" />
<span id="error_msg"></span> </form> </div>

index.html

Ajax代码:

$(function(){
$('#ajax_submit').click(function () {
$.ajax({
url:"/test_ajax/",
type:"POST",
data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
success:function (data) {
console.log(data) // data {"data": null, "status": false, "error": "\u4e3b\u673a\u540d\u592a\u77ed"}
var obj = JSON.parse(data); // 反序列化 把字符串data换成对象obj
// 序列化 JSON.stringify() 把obj转换为字符串
if(obj.status){
location.reload() // 重新加载页面
}else {
$('#error_msg').text(obj.error)
}
}
})
})
})

Django代码:

import json
def test_ajax(request):
ret = {'status':True,'error':None,'data':None} # 返回一个字典
try:
h = request.POST.get('hostname')
i = request.POST.get('ip')
p = request.POST.get('port')
b = request.POST.get('b_id')
print(h,i,p,b)
if h and len(h) > 5: # 主机名长度
print("ok")
models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b)
else:
ret['status'] = False
ret['error'] = '主机名太短'
except Exception as e:
ret['status'] = False
ret['error'] = '请求错误'
return HttpResponse(json.dumps(ret)) # 对字典进行序列化

5. serialize自动获取表单数据

<form class="add-form" method="POST" action="/home/">
<div class="group">
<input id='host' type="text" placeholder="主机名" name="hostname" />
</div> <div class="group">
<input id='ip' type="text" placeholder="IP" name="ip" />
</div> <div class="group">
<input id='port' type="text" placeholder="端口" name="port" />
</div> <div class="group">
<select id='sel' name="b_id">
{% for op in b_list %}
<option value="{{ op.id }}">{{ op.caption }}</option>
{% endfor %}
</select>
</div>
<input type="submit" value="提交" />
<a id="ajax_submit">要上天提交</a>
<input id="cancel" type="button" value="取消" />
<span id="error_msg"></span>
</form>

index.html

Ajax代码:

$.ajax({
url:"/test_ajax/",
type:"POST",
data:$('.add-form').serialize(), // 获取表单数据提交 必须是form表单
success:function (data) {
})

6. Ajax代码补充(traditional,dataType)

Ajax代码:

$(function(){
$('#add_submit_ajax').click(function(){
$.ajax({
url: '/ajax_add_app',
data: {'user': 123,'host_list': [1,2,3,4]},
// data: $('#add_form').serialize(),
type: "POST",
dataType: 'JSON', // 内部对传过来的数据直接执行JSON.parse 拿到的数据直接为对象而非字符串
traditional: true, // 添加此项 当字典里包含列表时候,后端可以getlist到里面的数据
success: function(obj){
console.log(obj);
},
error: function () { // 未知错误时执行,指前端收不到后台发送的obj时,执行
}
})
});
})

Django代码:

def ajax_add_app(request):
ret = {'status':True, 'error':None, 'data': None} app_name = request.POST.get('app_name')
host_list = request.POST.getlist('host_list')
obj = models.Application.objects.create(name=app_name)
obj.r.add(*host_list)
return HttpResponse(json.dumps(ret))

web框架-(五)Ajax的更多相关文章

  1. web框架开发-Ajax

    Ajax简介 向服务器发送请求的4种方式 1.浏览器地址栏,默认get请求2.form表单: get请求 post请求3.a标签,默认get请求 4.Ajax 特点: 1 异步请求 2 局部刷新 方式 ...

  2. WEB框架之Ajax

    一 Ajax简介 1 Ajax的介绍 AJAX翻译成中文就是"异步Javascript和XML".即使用JavaScript语言与服务器进行异步交互,传输的数据为XML(当然,传输 ...

  3. 使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的 ...

  4. Python开发【第十五篇】:Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

  5. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架   Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 ...

  6. [oldboy-django][1初始django]web框架本质 + django框架 + ajax

    web框架本质 浏览器(socket客户端) - 发送请求(ip和端口,url http://www.baidu.com:80/index/) - GET 请求头(数据请求行的url上: Http1. ...

  7. 五、Web框架基础(2)

    Tornado 异步协程编程.(其实是异步IO而非真正的异步,从内核拷贝到用户空间的过程还是同步的) 适合用户量大.高并发,如抢票.网页游戏.在线聊天等场景:或大量HTTP持久连接,通过单TCP持久连 ...

  8. 手把手和你一起实现一个Web框架实战——EzWeb框架(五)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(五)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 本篇代码,请选择demo5 中间件实现 ...

  9. python 学习笔记十五 web框架

    python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自 ...

  10. Python之路【第十五篇】WEB框架

    WEB框架本质 Python的WEB框架分为两类: 1.自己写socket,自己处理请求 2.基于wsgi(Web Server Gateway Interface WEB服务网关接口),自己处理请求 ...

随机推荐

  1. django路由的二级分发

    基于二级分发设计url路由 path('index/', views.index), path('index/', ([ path('test01/', test01), path('test02/' ...

  2. WPF图标拾取器

    <Grid x:Name="LayoutRoot"> <Border BorderBrush="> <Border.Effect> & ...

  3. nagios客户端安装监控

    1.在客户端机器上安装epel扩展源 yum install -y epel-release2.yum安装nagios及依赖包软件 yum install -y nagios-plugins nagi ...

  4. 报错:Original error: Could not proxy command to remote server. Original error: Error: read ECONNRESET

    问题:Appium的android真机启动手机时,会遇到以下问题: An unknown server-side error occurred while processing the command ...

  5. Jmeter之乱码 (三)

    使用Jmeter执行JDBC请求,往MySQL数据库中插入数据,如下图: 执行结果如下: 解决方案: 在JDBC Connection Configuration中的Database URL后加上&a ...

  6. Mysql数据库事务的四大特性:

    什么是事务? 事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行.为什么要使用事务:保证对数据操作的完整性和准确性.1,原子性:一个事 ...

  7. 【图形学手记】Inverse Transform Sampling 逆转换抽样

    需求: 我们通过调查,得知大多数人在20岁左右初恋,以20岁为基准,以随机变量X表示早于或晚于该时间的年数,为了简单,假设X值域为[-5,5],并且PDF(X)是一个正态分布函数(当然可以为任意分布, ...

  8. Oracle中 ORA-12704:字符集不匹配

    前言 在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配 1 select '中国','China',cas ...

  9. 第 10 章 python进程与多进程

    一.背景知识 顾明思义,进程即正在执行的一个过程,进程是对正在云的程序的一个抽象. 进程的概念起源与操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一,操作系统的其他所 ...

  10. Spring事务管理配置以及异常处理

    Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...