form表单提交数据,页面必定会刷新,ajax提交数据不会刷新,做到悄悄提交,多选删除,ajax提交实例
很多页面用到的模态对话框,如知明网站https://dig.chouti.com/的登录页都是模态对话框,
当点登录时,是用的ajax提交,因为输入错了信息,有返回消息,而页面没有刷新。
jquery ajax格式:
$.ajax({
'url':'/orm',
'type':'post',
'data':{'id':1,'name':'hhh'},
success:function (data) {
alert(data);
}
})
url是提交到那个地址 type是提交方法 data是要提交的数据集合,可使用变量如:$('#id').val(),可一句话提交一个表单里的所有值 如:'data':$('#f1').serialize(),
sucess:是服务成功返回数据时要执行的函数,服务器没返回数据时,这个函数不会执行,形参data,一定要带,即是返回的数据。
提交给orm操作后 常用Httprespones返回一个字符串json格式,再用json解析 ,不能用redirect,用render也没大用 这样我们在任何地方就可以用ajax提交数据到后台了,而页面不用刷新,一个简单标签即可提交,如:
$('#ajax_submit').click(function () {
$.ajax({
'url':'/orm',
'type':'post',
'data':{'id':1,'name':'hhh'},
success:function (data) {
alert(data);
}
})
})
例子:点击添加出现模态对话框,如果ip或端口格式不对,ajax提交立即返回错误提示不刷新。勾选1,3,5删除一次性删除并生效显示。

#models
from django.db import models
# Create your models here.
class host(models.Model):
ip = models.CharField(max_length=255)
port = models.IntegerField()
group_code = models.ForeignKey(to='group',to_field='code',default='hr',on_delete='code')
class group(models.Model):
code = models.CharField(max_length=30,default='hr',unique=True)
name = models.CharField(max_length=255) #views
from django.shortcuts import render,HttpResponse,redirect
from cmbd import models
import json
def home(request):
return HttpResponse('<h1>home</h1>')
def orm(request):
# models.host.objects.create(ip="1.1.1.1",port=80,code='market')
#models.host.objects.create(ip="1.1.1.6",port=88,group_code_id='dev')
# models.group.objects.create(code="dev",name="开发部")
# dic = {'code':'dep','name':"工程部"}
# models.group.objects.create(**dic)
if request.method == 'GET':
cmd = request.GET.get('orm')
if cmd == 'add_host':
ip = request.GET.get('ip')
port = request.GET.get('port')
group_code = request.GET.get('group_code')
if ip and port:
models.host.objects.create(ip=ip,port=port,group_code_id=group_code)
else:
return HttpResponse('error')
return redirect('/list')
else:
cmd = request.POST.get('orm')
if cmd == 'del_host':
host_id = request.POST.get('host_id')
if host_id:
models.host.objects.filter(id=host_id).delete()
return HttpResponse('success')
elif cmd == 'add_host':
ip = request.POST.get('ip')
port = request.POST.get('port')
group_code = request.POST.get('group_code')
if ip and port:
models.host.objects.create(ip=ip,port=port,group_code_id=group_code)
else:
return HttpResponse('error')
return HttpResponse('success')
elif cmd == 'edit_host':
id = request.POST.get('id')
ip = request.POST.get('edit_ip')
port = request.POST.get('edit_port')
group_code = request.POST.get('edit_group_code')
if ip and port: models.host.objects.filter(id=id).update(ip=ip,port=port,group_code_id=group_code)
else:
return HttpResponse('error')
return redirect('/list')
return render(request,'orm.html') def list(request):
v1 = models.host.objects.all()
v2 = models.group.objects.all()
return render(request,'list.html',{'v1':v1,'v2':v2}) def test_ajax(request):
ret = {"status":"true","data":"none","error":"none"}
try:
ip = request.POST.get('ip')
port = request.POST.get('port')
group_code = request.POST.get('group_code')
if len(ip) < 4:
ret["status"] = "false"
ret["error"] = "ip addr error"
except Exception as e:
pass
return HttpResponse(json.dumps(ret)) #templates
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
td a{
cursor: pointer;
}
.hide{
display: none;
}
.shade{
position: fixed;
top:0;
left:0;
right:0;
bottom:0;
background-color: black;
opacity:0.6;
z-index: 99;
}
.add_model{
height:400px;
width:600px;
position: fixed;
left: 50%;
top: 50%;
margin-left: -300px;
margin-top: -200px;
background-color: white;
border: 1px solid greenyellow;
z-index: 100;
}
</style>
</head>
<body>
<div id="shade" class="shade hide"></div>
<div id="add_model" class="add_model hide">
<form action="/orm" method="get" id="f1">
<table border="1px">
<thead><td>IP</td><td>端口</td><td>组别</td></thead>
<tr>
<td><input name="ip" type="text"/></td>
<td><input name="port" type="text"/></td>
<td>
<select name="group_code">
{% for i in v2 %}
<option value="{{ i.code }}">{{ i.name }}</option>
{% endfor %}
</select>
</td>
</tr>
</table>
<label id="msg" class="hide"></label>
<input type="text" style="display: none;" name="orm" value="add_host"/>
<input class="host_cancel" type="button" value="取消" style="position: absolute;bottom: 0;right: 123px;"/>
<input id="add_host_ack" type="submit" value="确定" style="position: absolute;bottom: 0;right: 0;"/>
<input id="ajax_submit" type="button" value="ajax提交" style="position: absolute;bottom: 0;right: 50px;"/>
</form>
</div>
<div id="edit_model" class="add_model hide">
<form action="/orm" method="post" id="f2">
<table border="1px">
<thead><td>IP</td><td>端口</td><td>组别</td></thead>
<tr>
<td><input name="edit_ip" type="text"/></td>
<td><input name="edit_port" type="text"/></td>
<td>
<select name="edit_group_code">
{% for i in v2 %}
<option value="{{ i.code }}">{{ i.name }}</option>
{% endfor %}
</select>
</td>
</tr>
</table>
<label id="edit_msg" class="hide"></label>
<input type="text" class="hide" name="id"/>
<input type="text" style="display: none;" name="orm" value="edit_host"/>
<input class="host_cancel" type="button" value="取消" style="position: absolute;bottom: 0;right: 50px;"/>
<input type="submit" value="确定" style="position: absolute;bottom: 0;right: 0;"/>
</form>
</div>
<h1>主机列表:</h1>
<form>
<input type="button" id="add_host" value="添加">
<input type="button" id="del_host" value="删除">
<input type="button" id="select_all" value="全选">
<input type="button" id="cancel_all" value="取消">
<input type="button" id="revert" value="反选">
</form>
<table border="" id="t1">
<thead><td>选择</td><td>序号</td><td>IP</td><td>端口</td><td>部门</td><td>操作</td></thead>
{% for i in v1 %}
<tr host_id="{{ i.id }}" group_code="{{ i.group_code_id }}">
<td><input type="checkbox"/></td>
<td>{{ forloop.counter }}</td><td>{{ i.ip}}</td><td>{{ i.port}}</td><td>{{ i.group_code.name}}</td><td><a class="del_single">删除</a>|<a class="edit_host">修改</a></td>
</tr>
{% endfor %}
</table>
<h1>组列表:</h1>
<table border="" id="t2">
<thead><td>序号</td><td>代码</td><td>组名</td></thead>
{% for i in v2 %}
<tr group_id="{{ i.id }}"><td>{{ forloop.counter}}</td><td>{{ i.code}}</td><td>{{ i.name}}</td></tr>
{% endfor %}
</table> <script src="/static/jquery-3.3.1.js"></script>
<script>
$(function () {
$('#add_host').click(function () {
$("#shade,#add_model").removeClass("hide");
})
$('.host_cancel').click(function () {
$(".shade,.add_model").addClass("hide");
})
$('#select_all').click(function () {
$('#t1 input[type="checkbox"]').prop("checked", true);
})
$('#cancel_all').click(function () {
$('#t1 input[type="checkbox"]').prop("checked", false);
})
$('#revert').click(function () {
$('#t1 input[type="checkbox"]').each(function () {
if($(this).prop('checked')){
$(this).prop('checked',false);
}else {
$(this).prop('checked',true);
}
});
})
$('#del_host').click(function () {
$('#t1 input[type="checkbox"]').each(function () {
if($(this).prop('checked')){
host_id = $(this).parent().parent().attr('host_id');
$.ajax({
'url':'/orm',
'type':'post',
'data':{'orm':'del_host','host_id':host_id},
success:function (data) {
console.log(data);
location.reload();
}
})
}
});
})
$('#ajax_submit').click(function () {
$.ajax({
'url':'/test_ajax',
'type':'post',
'data':$("#f1").serialize(),
success:function (data) {
obj = JSON.parse(data)
if(obj.status=='true'){
$('#msg').removeClass('hide').text(obj.data);
location.reload();
}else {
$('#msg').removeClass('hide').text(obj.error);
}
}
})
})
$(".del_single").click(function () {
host_id = $(this).parent().parent().attr('host_id');
$(this).parent().parent().remove();
$.ajax({
'url':'/orm',
'type':'post',
'data':{'orm':'del_host','host_id':host_id},
success:function (data) {
alert(data);
}
})
})
$(".edit_host").click(function () {
group_code = $(this).parent().parent().attr('group_code');
host_id = $(this).parent().parent().attr('host_id');
ip = $(this).parent().parent().children().eq(2).text();
port = $(this).parent().parent().children().eq(3).text();
console.log(host_id,ip,port);
$("#shade,#edit_model").removeClass("hide");
$("#f2 select[name='edit_group_code']").val(group_code);
$("#f2 input[name='edit_ip']").val(ip);
$("#f2 input[name='edit_port']").val(port);
$("#f2 input[name='id']").val(host_id);
}) })
</script>
</body>
</html>
form表单提交数据,页面必定会刷新,ajax提交数据不会刷新,做到悄悄提交,多选删除,ajax提交实例的更多相关文章
- form表单的一个页面多个上传按钮实例
/* * 图片上传 */ @RequestMapping("/uploadFile") @ResponseBody public String uploadFile(@Reques ...
- form表单提交和ajax提交的区别
form表单是整个页面跳到服务器的地址然后提交数据: ajax是往这个地址post数据 <form style="padding:0px;margin:0px;" targe ...
- web框架-(六)Django补充---form表单验证
一.form表单验证 1. 常规html页面的form表单验证 常规页面中,如果想实现对表单中用户输入信息的数据验证,需要配合Ajax来实现. 使用前我们先来熟悉下函数参数:request,其中包含的 ...
- 前端HTML基础之form表单
目录 一:form表单 1.form表单功能 2.表单元素 二:form表单搭建(注册页面) 1.编写input会出现黄色阴影问题 三:完整版,前端代码(注册页面) 四:type属性介绍 1.inpu ...
- Django中三种方式写form表单
除了在html中自己手写form表单外,django还可以通过 继承django.forms.Form 或django.forms.ModelForm两个类来自动生成form表单,下面依次利用三种方式 ...
- thinkPHP5.0使用form表单提交数据和删除文章,不用TP的提示页面,使用弹出提示信息
form表单提交数据和删除文章时,TP的默认信息提示页面的看起来不是很好看,想要实现弹窗提示怎么做呢? 前端:可以使用前端的一个知识--iframe,iframe元素会创建包含另外一个文档的内联框架: ...
- 从页面获取form表单提交的数据
1 使用HttpServletRequest,方便灵活 页面代码,使用action提交一个表单,里边有球的id,球的主人,球的颜色,所在省份,区域 <form action="ball ...
- 关于form表单提交数据后不跳转页面+ajax接收返回值的处理
1.前台的form表单建立,注意action.enctype的内容, 2.通过添加一个隐藏的iframe标签使form的target指向iframe来达到不跳转页面的效果,同时需要在js里获取ifra ...
- Form表单提交数据的几种方式
一.submit提交 在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮(<input type='submit'>)就可以进行数据的提交, ...
- form表单action提交表单,页面不跳转且表单数据含文件的处理方法
在最近的项目中需要将含 input[type='file']的表单提交给后台 ,并且后台需要将文件存储在数据库中.之前所用的方法都是先将文件上传到七牛服务器上,然后七牛会返回文件的下载地址,在提交表单 ...
随机推荐
- unsigned long long类型与long long类型
最近做题的时候,经常遇到范围是2^63,取模2^64的这种题目.遇到这种限制条件时就要想到用unsigned long long类型. 可以简洁地声明为typedef unsigned long lo ...
- python2入门(3)
六.python列表(List) python最常见的序列类型python列表List使用[]表示,元素之间以逗号分隔,元素类型不需要相同 内置操作: list = [1,2,3,'four'] li ...
- 2018-软工机试-A-西班牙馅饼
A. 西班牙馅饼 单点时限: 1.0 sec 内存限制: 256 MB 港岛妹妹,你献给我的西班牙馅饼 甜蜜地融化了我,天空之城在哭泣 港岛妹妹,我们曾拥有的甜蜜的爱情 疯狂地撕裂了我,天空之城在哭泣 ...
- 执行monkey APK 制作
一.主布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an ...
- Golang的数组
Golang数组 package main import "fmt" func main() { // 定义一个长度为10,元素类型为string的值 li2 := [10]str ...
- 信号量及P/V操作
有一个厕所,允许多个男生同时使用,也允许一个女生使用,但是不允许男女共用(那岂不是乱了套)通过厕所门口有一个三面小牌子来运行.一面是男生在用,第二面是女生在用,第三面是空.运行机制:第一个进入空厕所男 ...
- Hadoop、Strom集群实现日志自动清理
Hadoop+Storm集群,运行一段时间ZooKeeper等关键进程自动停止运行,经检测是系统磁盘不足 系统磁盘100%: 查找大文件后发现,空间均被ZooKeeper产生的log占用 find / ...
- CSS学习笔记_day1
目录 一. 什么是HTML 二.编辑器 三.Html的基本骨架 四.html基本标签 h.p.img.a.audio.video.ul>li.ol>li.dl dd dt.span.div ...
- ROS使用小知识点
输入 rosrun rqt_graph rqt_graph 可以打开一个界面观察节点与话题的关系 绿色和蓝色的是节点 红色的是话题 查看ros中额的tf转换信息 rosrun rqt_tf_tree ...
- python利用requests和threading模块,实现多线程爬取电影天堂最新电影信息。
利用爬到的数据,基于Django搭建的一个最新电影信息网站: n1celll.xyz (用的花生壳动态域名解析,服务器在自己的电脑上,纯属自娱自乐哈.) 今天想利用所学知识来爬取电影天堂所有最新电影 ...