JavaScript实现ajax发送表单数据
知识点:
1.重置表单数据
2.获取表单数据(纯JavaScript)
3.设置表单数据(纯JavaScript)
4.ajax发送数据到客户端
(1)设置请求头,自己组合数据
(2)实例化表单对象,不需要设置请求头,数据不需要自己组合
添加案例:
前端样式:
<style>
.model{
position: fixed;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
background-color: white;
}
.hide{
display: none;
}
</style>
前端html代码:
<div><a onclick="show_form();">添加</a></div>
<div class="model hide">
<form method="post" id="add">
<input type="text" name="username" placeholder="username">
<input type="text" name="age" placeholder="age">
<input type="radio" name="gender" value="" checked>男
<input type="radio" name="gender" value="">女
<select name="class">
{% for cls in classes %}
<option value="{{ cls.id }}">{{ cls }}</option>
{% endfor %}
</select>
<input type="button" onclick="add_stu();" value="添加">
</form>
</div>
<div>
<table border="">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>班级</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
{% for row in students %}
<tr><td>{{ row.id }}</td>
<td>{{ row.username }}</td>
<td>{{ row.age }}</td>
<td>
{% if row.gender %}
男
{% else %}
女
{% endif %}
</td>
<td>{{ row.cls }}</td>
<td><a onclick="XhrPostRequest(this);">删除</a>|<a href="/edit_student.html?nid={{ row.id }}">编辑</a></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
相关js代码:show_form
function show_form(){
document.getElementsByClassName("model")[].className = 'model';
}
ajax发送:
function GetXhr(){
if(XMLHttpRequest){
var Xh = new XMLHttpRequest();
}else{
Xh = new ActiveXObject('Microsoft.XMLHTTP');
}
return Xh
}
function add_stu(){
var xhr=GetXhr();
xhr.onreadystatechange = function(){ #只要是状态码发生改变就会触发
var data=xhr.responseText;
var ret_dict = JSON.parse(data);
if(xhr.readyState==){
alert(ret_dict['status'])
document.getElementById("add").reset();
document.getElementsByClassName("model")[].className += ' hide';
document.location.reload()
}
}
//获取text值
var username=document.getElementsByName("username")[].value;
var age = document.getElementsByName('age')[].value;
//var token =document.getElementsByName('csrfmiddlewaretoken')[0].value;
var token = "{{ csrf_token }}"
//获取radio的表单值
var radio = document.getElementsByName('gender');
var gender=null;
for(i=;i<radio.length;i++){
if(radio[i].checked){
if(i==)
gender=;
else
gender=;
}
}
//获取select表单值
var select=document.getElementsByName('class')[]
var index=select.selectedIndex;
var sel_id = select[index].value;
//重组数据
var data = "username="+username+"&age="+age+"&gender="+gender+"&class="+sel_id+"&csrfmiddlewaretoken="+token;
xhr.open('post','/add_student.html');
#请求头一定要设置
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset-UTF-8");
xhr.send(data);
}
删除案例可看:原生ajax中get和post请求
修改案例:
前端html代码:
<tr>
<td></td>
<td>fwa发</td>
<td></td>
<td>女</td>
<td>Python工程师</td>
<td><a onclick="XhrPostRequest(this);">删除</a>|<a onclick="show_form_edit(this);">编辑</a></td>
</tr>
<style>
.model,.model_2{
position: fixed;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
background-color: white;
}
.hide{
display: none;
}
</style> <div class="model_2 hide">
<form method="post" id="edit">
<input type="hidden" name="id" value="">
<input type="text" name="username" placeholder="username" value="">
<input type="text" name="age" placeholder="age" value="">
<input type="radio" name="gender" value="" >男
<input type="radio" name="gender" value="" >女
<select name="class">
{{% for cls in classes %}
<option value="{{ cls.id }}">{{ cls }}</option>
{% endfor %}
</select>
{% csrf_token %}
<input type="button" onclick="edit_stu(this);" value="修改">
</form>
</div>
js代码:
function GetXhr(){
if(XMLHttpRequest){
var Xh = new XMLHttpRequest();
}else{
Xh = new ActiveXObject('Microsoft.XMLHTTP');
}
return Xh
}
显示模态对话框,自动添加内容:
//修改表单
function show_form_edit(ths){
#显示编辑框
document.getElementsByClassName("model_2")[].className = 'model_2';
#获取原来table表格中的数据信息
var id=ths.parentElement.parentElement.childNodes[].textContent;
var username=ths.parentElement.parentElement.childNodes[].textContent;
var age=ths.parentElement.parentElement.childNodes[].textContent;
var gender=ths.parentElement.parentElement.childNodes[].textContent.trim();
if(gender=="男"){
gender=;
}else{
gender=;
}
var classes=ths.parentElement.parentElement.childNodes[].textContent;
#开始修改显示出来的form表单数据
form_edit = document.getElementById("edit");
id_inp = form_edit.firstElementChild;
id_inp.value=id;
user_inp = id_inp.nextElementSibling;
user_inp.value=username;
age_inp = user_inp.nextElementSibling;
age_inp.value=age;
gender_inp1=age_inp.nextElementSibling;
if(gender_inp1.value==gender){
gender_inp1.checked=true;
}
gender_inp2=gender_inp1.nextElementSibling;
if(gender_inp2.value==gender){
gender_inp2.checked=true;
}
sel_inp = gender_inp2.nextElementSibling;
for(var i=;i<sel_inp.length;i++){
if(sel_inp[i].text==classes){
sel_inp[i].selected=true;
break;
}
}
}
点击修改,ajax提交数据(使用form对象提交,就不需要请求头设置了,否则设置出错会报错):
//发送表单
function edit_stu(ths){
#实例化表单对象
var form = new FormData();
#开始获取数据
var csrf_ele=ths.previousElementSibling;
var sel_ele=csrf_ele.previousElementSibling;
var gender_ele = sel_ele.previousElementSibling;
if(gender_ele.checked){
var gender=
}
var gender_ele1=gender_ele.previousElementSibling;
if(gender_ele1.checked){
var gender=
}
var age_ele = gender_ele1.previousElementSibling;
var user_ele = age_ele.previousElementSibling;
var id_ele = user_ele.previousElementSibling;
#将数据添加到表单对象中,组合发送
form.append('csrfmiddlewaretoken',csrf_ele.value)
form.append("class",sel_ele.value)
form.append('gender',gender)
form.append('age',age_ele.value)
form.append('username',user_ele.value)
form.append('nid',id_ele.value) var xhr = GetXhr()
xhr.onreadystatechange = function () {
if(xhr.readyState==){
alert("提交成功")
document.getElementById("edit").reset()
document.getElementsByClassName("model_2")[].className += ' hide';
document.location.reload()
}
}
xhr.open('post','/edit_student.html',true)#不需要设置请求头
xhr.send(form)
}
补充:使用jquery获取form表单时:
可以使用:$("#fm").serialize()
JavaScript实现ajax发送表单数据的更多相关文章
- 第一百六十节,封装库--JavaScript,ajax注册表单到数据库
封装库--JavaScript,ajax注册表单到数据库 效果图 前台js var biaodan = $().xu_lie_biao_dan($('form').sh_jd()); //序列化获取表 ...
- hyper发送表单数据
前言 某个美丽的下午,运维把服务器上的nginx升级了,http协议也变成了http2.0,我本地的requests再也连接不到服务器,然后就找到了额hyper 但是hyper的文档写的很简单,而且相 ...
- 异步发送表单数据到JavaBean,并响应JSON文本返回
1) 提交表单后,将JavaBean信息以JSON文本形式返回到浏览器 <form> 编号:<input type="text" name="id&q ...
- jquery Ajax提交表单数据
//表单中控件的name要和实体类字段属性一致 $.ajax({ cache: true, type: "POST", url:ajaxCallUrl, data:$('#your ...
- 每天一个JavaScript实例-检測表单数据
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。
工作记录用 1 大概页面,点击选择按钮,选择文件,填写备注并可以上传前预览,然后点击上传按钮开始上传 2 html+js代码 <h2>Test</h2> <div id= ...
- 21SpringMvc_异步发送表单数据到Bean,并响应JSON文本返回(这篇可能是最重要的一篇了)
这篇文章实现三个功能:1.在jsp页面点击一个按钮,然后跳转到Action,在Action中把Emp(int id ,String salary,Data data)这个实体变成JSON格式返回到页面 ...
- jquery实现ajax提交表单数据或json数据
- 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据
原文:[ASP.NET Web API教程]5.2 发送HTML表单数据:URL编码的表单数据 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...
随机推荐
- SQL SERVER 2008R2 安装问题
背景 今天帮可以安装数据库.操作系统是windows server 2012 标准版, 安装SQL SERVER 2008R2 . 运行安装程序,提示如下 这是因为两者之间存在兼容性问题. ...
- jquery原理的简单分析,让你扒开jquery的小外套。
引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次LZ和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客 ...
- GPT & UEFI Install Windows7
安装介质以FAT或者FAT32分区安装介质添加UEFI支持文件(Windows7及其以前的系统,不支持UEFI启动) 从Windows8的安装文件中提取Bootmgfw.efi文件,重命名为BOOTX ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- PAT-1004 Counting Leaves
1004 Counting Leaves (30 分) A family hierarchy is usually presented by a pedigree tree. Your job is ...
- mysql 查询所有子节点的相关数据
定义一个函数 ) CHARSET utf8 BEGIN ); ); SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempCh ...
- Mininet安装
Mininet 安装 根据SDNLAB上的实验进行安装.连接地址 需要注意的是切换到用户目录下进行clone github上的源码. 1.卸载之前安装的Mininet 最好是先到目录下看是否有这些文件 ...
- Alpha版本冲刺(十)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 我与git“美妙”的一天
今天是第一天使用git,苦不堪言,感觉服务器和自己都要爆炸了,弄了半天才马马虎虎会了一点,基本流程如下 1.在mukever.online注册用户 2.下载git for windows(一个客户端) ...
- PAT 1043 输出PATest
https://pintia.cn/problem-sets/994805260223102976/problems/994805280074743808 给定一个长度不超过10000的.仅由英文字母 ...