通过ajax可以悄悄的把数据传输给服务器,实现页面无刷新。

一:ajax使用语法

  1)普通方式

    ajax使用语法:
$.ajax({
url:"/host", //提交到那里
type:"POST", //提交类型
data:{"k1":"v1","k2":"v2"} //提交的数据
success:function(data1){ //success不会直接运行,当服务器有数据传输过来才会触发执行。
                    匿名函数必须要有一个参数,用来接受数据,data1用来接受是服务器端返回字符串数据
alter(data1);
}
})

  示例:

#ajax使用例子1
urls.py
url(r'^test_ajax$', views.ajax_submit), views.py
def ajax_submit(request):
if request.method=="POST":
print(request.POST.get("k1"),request.POST.get("k2"))
return HttpResponse("home") 模板:
<a id="ajax_submit">悄悄的提交</a> script:
$("#ajax_submit").click(function() {
$.ajax({
url: "/test_ajax",
type: "POST",
data: {"k1": "v1", "k2": "v2"},
success: function (data1) {
alert(data1);
}
})
})

  2)通过页面传递数据 

        $.ajax({
url: "/test_ajax",
type: "POST",
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
success: function (data1) {
alert(data1);
}
})
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
可以通过如下方式代替:
data: $('#add_form').serialize(),把放有form表单数据都打包到后台,不需要自己一个个写字典数据
 
 $.ajax({
url: "/test_ajax",
type: "POST",
data:$("#add_form").serialize(),
success: function (data1) {
alert(data1);
}
})

 

#ajax使用例子2 传递页面数据给后台
<form action="/host" method="post">
<div class="group">
<input type="text" name="hostname" id="hostname" placeholder="请输入主机名">
</div>
<div class="group">
<input type="text" name="ip" id="ip" placeholder="请输入主机IP">
</div>
<div class="group">
<input type="text" name="port" id="port" placeholder="请输入主机端口">
</div>
<div class="group">
<select name="group_id" id="group_id">
{% for group in v4 %}
<option value="{{ group.id }}">{{ group.caption }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交">
<input type="button" value="取消">
<a id="ajax_submit" style="cursor: pointer">悄悄的提交</a>
</div>
</form> $("#ajax_submit").click(function() {
$.ajax({
url: "/test_ajax",
type: "POST",
data: {"hostname":$("#hostname").val(),"ip":$("#ip").val(),"port":$("#port").val(),"group_id":$("#group_id").val()},
success: function (data1) {
alert(data1);
}
})
}) def ajax_submit(request):
if request.method=="POST":
print(request.POST)
return HttpResponse("home") 输出结果:<QueryDict: {'hostname': [''], 'ip': [''], 'group_id': ['']}>
    #示例3--返回验证数据:为什么要加try,如果后台要异常了,前端页面是不能感知的,所以我们加try抛出异常,并给前端提交ret

    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')
if h and len(h) > 5:
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)) $('#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){
var obj = JSON.parse(data);//字符串转对象
if(obj.status){
location.reload(); //如果没有错重新加载页面(刷新))
}else{
$('#erro_msg').text(obj.error);
}
}
})
}); ## data: $('#add_form').serialize(),把放有form表单数据都打包到后台,不需要自己一个个写字典数据 data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
<===> data:$("#add_form").serialize(), 表格中的数据,有id但是在点编辑的时候就会没有,所以要把id传递给编辑
在编辑对话框里传递<input type="text" name="nid" style="display:none"> $('.edit').click(function(){
$('.shade,.edit-modal').removeClass('hide'); var bid = $(this).parent().parent().attr('bid');
var nid = $(this).parent().parent().attr('hid'); 传递nid $('#edit_form').find('select').val(bid); //设置下拉框默认值
$('#edit_form').find('input[name="nid"]').val(nid);//设置传递的nid // 修改
/*
$.ajax({
data: $('#edit_form').serialize()
});
*/
// models.Host.objects.filter(nid=nid).update()
})

 3)如果页面的数据是列表,上面的数据传输到后台处理不了

 
    #ajax添加,注意列表
$("#ajax_buttom").click(
function(){
$.ajax(
{
url:"/ajax_add_app",
type:"POST",
dataType:'JSON',//==>JSON.parse(data)
data:{"k1":[1,2,3,4]},//data:{"k1":[1,2,3
]}传入后台会处理不了.发列表需要加参数 traditional:true
traditional:true,

success:function(data){
alert(data);
},
error:function(data){ //执行失败执行 }} ) } )

二:ajax与非 ajax多对多数据

  

    #增加数据例子(非ajax)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.shade {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: #333333;
opacity: 0.6;
z-index: 9;
} .add-mode {
position: fixed;
height: 300px;
width: 400px;
top: 100px;
left: 50%;
margin-left: -200px;
z-index: 11;
background-color: white;
} .hide {
display: none;
}
</style>
</head>
<body>
<input type="button" value="增加" id="add_host">
<h1>应用列表</h1>
<table border="1px">
<thead>
<tr>
<td>应用名称</td>
<td>应用主机列表</td>
</tr>
</thead>
<tbody>
{% for app in app_list %}
<tr>
<td>{{ app.name }}</td>
<td>{% for r in app.r.all %}
<span>{{ r.hostname }}</span>
{% endfor %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="shade hide"></div>
<div class="add-mode hide">
<form action="{% url "app" %}" id="add_form" method="post">
<div class="group">
<input type="text" name="app_name" id="app_name" placeholder="请输入应用名">
</div> <div class="group">
<select name="host_list" id="host_list" multiple="multiple">
{% for host in host_list %}
<option value="{{ host.nid }}">{{ host.hostname }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交" id="add_ok">
<input type="button" value="取消">
</div>
</form>
</div>
<script src="/static/jquery-1.12.4.js"></script>
<script>
$("#add_host").click(
function () {
$(".shade,.add-mode").removeClass("hide")
console.log($(".shade,.add-mode"))
}
)
</script>
</body>
</html> ---------------------
def app(request):
if request.method=="GET":
app_list=Application.objects.all()
# for app_tmp in app_list:
# print(app_tmp.name,app_tmp.r.all())
host_list=Host.objects.all()
return render(request,"app.html",{"app_list":app_list,"host_list":host_list})
elif request.method=="POST":
#先创建application
app_name=request.POST.get("app_name")
host_list=request.POST.getlist("host_list")#列表
obj=Application.objects.create(name=app_name)#create会返回当前创建的对象
obj.r.add(*host_list)
return redirect("/app") #ajax添加,注意列表
$("#ajax_buttom").click(
function(){
$.ajax(
{
url:"/ajax_add_app",
type:"POST",
dataType:'JSON',//==>JSON.parse(data)
data:{"k1":[1,2,3,4]},//data:{"k1":[1,2,3]}传入后台会处理不了.发列表需要加参数 traditional:true
traditional:true,
success:function(data){
alert(data);
},
error:function(data){ //执行失败执行 }
}
)
}
) def ajax_add_app(request):
if request.method=="POST":
list_1=request.POST.getlist("k1")
print(list_1)
return HttpResponse("OK")
--------------
[02/Nov/2017 15:40:04] "POST /ajax_add_app HTTP/1.1" 200 2
['', '', '', ''] #删除,编辑 编辑 <div class="edit-mode hide">
<form action="{% url "app" %}" id="add_form" method="post">
<div class="group">
<input type="text" name="app_name" id="app_name" placeholder="请输入应用名">
</div> <div class="group">
<select name="host_list" id="host_list" multiple="multiple">
{% for host in host_list %}
<option value="{{ host.nid }}">{{ host.hostname }}</option>
{% endfor %}
</select>
</div>
<div class="group">
<input type="submit" value="提交" id="add_ok">
<input type="button" value="ajax提交" id="ajax_buttom">
</div>
</form>
</div> $(".edit_a").click(
function(){
$(".shade,.edit-mode").removeClass("hide");
//把获取的数据加入列表
var host_list=[]
$(this).parent().prev().children().each(
function(){
host_list.push($(this).attr("hid"))
}
)
$(".edit-mode").find("select").val(host_list);
}
)

16)django-ajax使用的更多相关文章

  1. 关于Django Ajax CSRF 认证

    CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的 ...

  2. Django ajax MYSQL Highcharts<1>

    Another small project with django/Ajax/Mysql/Highcharts. 看下效果图  - delivery dashboard .嘿嘿 是不是还蛮好看的. 废 ...

  3. django ajax练习

    这几天遇到了django ajax请求出错的问题,总结一下 前端js:我这里创建的是一个字典格式的数据,前端js收到字典之后也是要用字典的形式去解包后台传送过来的数据,比如我下面的写法:data['s ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. python学习-- Django Ajax CSRF 认证

    使用 jQuery 的 ajax 或者 post 之前 加入这个 js 代码:http://www.ziqiangxuetang.com/media/django/csrf.js /*======== ...

  6. 3/16 Django框架 环境搭建

    3/16 Django框架 环境搭建 环境搭建 Python解释器 Python代码通过Python解释器去执行. 编程语言 机器语言---汇编语言(助记符)---高级语言 解释型语言:解释器将代码一 ...

  7. Python之路【第三十一篇】:django ajax

    Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...

  8. Django——Ajax相关

    Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数 ...

  9. django ajax 及批量插入数据 分页器

    ``` Ajax 前端朝后端发送请求都有哪些方式 a标签href GET请求 浏览器输入url GET请求 form表单 GET/POST请求 Ajax GET/POST请求 前端朝后端发送数据的编码 ...

  10. Django——Ajax

    1.Ajax简介 AJAX(Asynchronous Javascript And XML)--"异步的JavaScript与XML". Ajax使用Javascript语言与服务 ...

随机推荐

  1. 分布式中的 transaction log

    分布式中的 transaction log 在分布式系统中,有很多台node组成一个cluster,对于client 的一个写操作请求而言,在什么样的情况下,cluster告诉client此次写操作请 ...

  2. POSIX信号和自定义signal函数

    一.信号的概念 信号(signal)就是告知某个进程发生了某个事件的通知:信号通常是异步发生的,也就是说接受信号的进程不知道信号的准确 发生时刻:信号可以(1)由一个进程发给另一个进程:(2)由内核发 ...

  3. luogu 2827 蚯蚓 单调队列/优先队列

    易知可利用优先队列选取最大值: 但是通过分析可知,先取出的蚯蚓分开后仍然要比后分的长,所以可直接利用单调队列找队头即可,分三个单调队列,分别找未切割,切割,切割2三种情况 #include<bi ...

  4. 建立一个漂亮的PHP验证码类文件及调用方式

    //验证码类class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';/ ...

  5. python中的深拷贝和浅拷贝

    python的复制,深拷贝和浅拷贝的区别   在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一 ...

  6. nginx + iis 使用介绍

    1.下载 nginx 2.配置nginx 文件 1)配置该目录下E:\nginx\nginx-1.9.3\conf: #user nobody; worker_processes ; #error_l ...

  7. 第20月第4天 pycharm utf-8

    1.运行python %run a.py 运行 https://blog.csdn.net/little_bobo/article/details/78982412 2.UnicodeDecodeEr ...

  8. JSON格式说明

    JSON的优点 相比XML拥有更简单的格式. 不同WEB浏览器处理的结果一样. 纯文本数据交换格式. JSON格式特点 {} 对象定义域 key:value 定义属性 key 字符串格式,value ...

  9. struts基础3-把数据写入页面

    一.OGNL(Object-Groph Navigation Language) 是一种强大的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能. 1)与 ...

  10. 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?

    假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么? 在执行这条语句的过程中,保存在result中的值被读 ...