通过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. 安装软件出现缺少vcruntime140.dll

    安装VC运行库QQ群:616945527 ->VC目录下

  2. springboot使用jpa+mongodb时,xxxRepository不能Autowired的问题

    springboot启动类: @SpringBootApplication public class MainApp { public static void main(String[] args) ...

  3. pycharm使用方法

    https://blog.csdn.net/zhaihaifei/article/details/51658425

  4. 5-24 css内容的补充

    1,标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 标准文档流下 有哪些微观现 ...

  5. java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?

    java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型

  6. CountDownLatch 闭锁、FutureTask、Semaphore信号量、Barrier栅栏

    同步工具类可以是任何一个对象.阻塞队列可以作为同步工具类,其他类型的同步工具类还包括信号量(Semaphore).栅栏(Barrier).以及闭锁(Latch). 所有的同步工具类都包含一些特定的结构 ...

  7. 安装mysql8.0.12以及修改密码和Navicat的连接

    mysql8.0+与安装其他版本不同一.安装mysql8.0.121.到官网https://www.mysql.com/  下载mysql-8.0.12-winx64.zip(不要.mis),直接解压 ...

  8. Linux Shell脚本编程

    ⒈为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理 2)对于JavaEE和Python程序员来说,有些工作需要编写一些Shell脚本进 ...

  9. 在 sql server 中,查询 数据库的大小 和 数据库中各表的大小

    其实本来只想找一个方法能查询一下 数据库 的大小,没想到这个方法还能查询数据库中 各个数据表 的大小,嗯,挺好玩的,记录一下. MSDN资料:https://msdn.microsoft.com/zh ...

  10. 【转】实习小记-python 内置函数__eq__函数引发的探索

    [转]实习小记-python 内置函数__eq__函数引发的探索 乱写__eq__会发生啥?请看代码.. >>> class A: ... def __eq__(self, othe ...