Ajax

  Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 JavaScriptXML标准通用标记语言的子集),AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面
1、初识
$.ajax({
url: '/host', // 数据提交地址
type: "POST", // 提交类型
data: {'k1': 123, 'k2': "root"}, // 提交的内容 字典格式
success: function(data){    // 客户端会一直等待服务端返回的数值
// data是服务器端返回的字符串
var obj = JSON.parse(data);
}
}) 建议:永远让服务器端返回一个字典
return HttpResponse(json.dumps(字典))

2、简单的前后端交互 

 <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("主机名太短")  # 返回错误提示

  

3、对前后端交互完善(当后端有问题时,前端收不到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)) # 对字典进行序列化

4、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) {
})

5、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))

6、页面跳转和刷新 

$.ajax({
url: '/index/',
data: {'k': 'v', 'list': [1,2,3,4], 'k3': JSON.stringfy({'k1': 'v'}))}, $(form对象).serilize()
type: 'POST',
dataType: 'JSON':
traditional: true,
success:function(d){
location.reload() # 刷新
location.href = "某个地址" # 跳转
}
})

  

 

  

 

Python开发【前端】:Ajax的更多相关文章

  1. Python开发【前端】:Ajax(一)

    Ajax Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 JavaScr ...

  2. Python开发【前端】:jQuery

    jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...

  3. Python开发【前端】:DOM

    DOM(文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页 ...

  4. Python开发【前端】:JavaScript

    JavaScript入门 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...

  5. Python开发【前端】:CSS

    css样式选择器 标签上设置style属性: <body> <div style="background-color: #2459a2;height: 48px;" ...

  6. Python开发【前端】:HTML

    HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...

  7. Python web前端 11 form 和 ajax

    Python web前端 11 form 和 ajax 一.打开服务器 将handlers.py.httpd.py和libs.py三个文件放入新文件夹中,双击打开httpd.py文件即可 二.ajax ...

  8. 基于Flask开发网站 -- 前端Ajax异步上传文件到后台

    大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来.如:从网页界面(前端)上传文件到服务器(后端). 放一下该模块的界面 ...

  9. Python开发【第一篇】:目录

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python ...

随机推荐

  1. VR的国内研究现状及发展趋势

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 一.国内研究现状 我国虚拟现实技术研究起步较晚,与发达国家还有一定的差距. 随着计算机图形学.计算机系统 ...

  2. 【Java EE 学习 17 上】【dbutils和回调函数】

    一.dbutils的核心就是回调函数,可以说如果没有回调函数的思想,dbutils是不可能被开发出来的. 对于dbutils中的QuryRunner类,向该类的query方法提供不同的参数,可以得到不 ...

  3. Cycles渲染研究测试效果图

    从左到右:.贴图镂空透明  2.纹理半透明  3.纹理  4.材质半透明  5.材质 输入输出节点信息如下: ############################################# ...

  4. 复利计算--结对项目<04-11-2016> 1.0.0 lastest 阶段性完工~

    结对项目:Web复利计算 搭档博客地址:25江志彬  http://www.cnblogs.com/qazwsxedcrfv/ 个人摘要: (2016-04-09-12:00)补充:之前传送门没做好, ...

  5. 分享Kali Linux 2016.2第50周虚拟机

    分享Kali Linux 2016.2第50周虚拟机该虚拟机使用Kali Linux 2016.2第50周的64位镜像安装而成.基本配置如下:(1)该系统默认设置单CPU双核,内存为2GB,硬盘为50 ...

  6. sublime text 3 使用方法

    1.Package Control 安装插件 2.Material Theme 主题 3.Emmet 自动HTML标签 4.Snippets JS自动片段 5.Advance newfile 文件夹下 ...

  7. js无参数对象

    <script type="text/javascript"> var o={ a : function(){ for (var i = arguments.lengt ...

  8. Ubuntu下使用vsftpd实现FTP

    ## 哈哈哈啊哈 被领导啪啪啪打脸,文件连在线打开都不行,你做事情的时候有没有考虑过别人使用时的感受!! 需求: 部门老大希望在内网搭建一个用于员工共享文件的系统. 很自然的就想到通过FTP去实现. ...

  9. [超级懒人最简单法]iPhone 6 plus 适配切图方法分享(转载文章)

    网络上已经有很多适配教程,可是看了半天总是半懂不懂..最后还是要综合多个教程再动动脑子动动手,最好有程序大哥帮你试一下(这得有多大的福气) 如果有跟我一样情况的: 1.       有人说用sketc ...

  10. 成功进行了一次UDP打洞

    本次测试参数:服务端是公网固定IP:两个客户端A和B分别位于不同电脑,不同宽带,不同型号路由后面(一个家庭路由,一个企业路由),且路由没有经过特别的设置.测试没有什么特别的地方,只是依照网络资料进行实 ...