知识点:

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发送表单数据的更多相关文章

  1. 第一百六十节,封装库--JavaScript,ajax注册表单到数据库

    封装库--JavaScript,ajax注册表单到数据库 效果图 前台js var biaodan = $().xu_lie_biao_dan($('form').sh_jd()); //序列化获取表 ...

  2. hyper发送表单数据

    前言 某个美丽的下午,运维把服务器上的nginx升级了,http协议也变成了http2.0,我本地的requests再也连接不到服务器,然后就找到了额hyper 但是hyper的文档写的很简单,而且相 ...

  3. 异步发送表单数据到JavaBean,并响应JSON文本返回

    1)  提交表单后,将JavaBean信息以JSON文本形式返回到浏览器 <form> 编号:<input type="text" name="id&q ...

  4. jquery Ajax提交表单数据

    //表单中控件的name要和实体类字段属性一致 $.ajax({ cache: true, type: "POST", url:ajaxCallUrl, data:$('#your ...

  5. 每天一个JavaScript实例-检測表单数据

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。

    工作记录用 1 大概页面,点击选择按钮,选择文件,填写备注并可以上传前预览,然后点击上传按钮开始上传 2 html+js代码 <h2>Test</h2> <div id= ...

  7. 21SpringMvc_异步发送表单数据到Bean,并响应JSON文本返回(这篇可能是最重要的一篇了)

    这篇文章实现三个功能:1.在jsp页面点击一个按钮,然后跳转到Action,在Action中把Emp(int id ,String salary,Data data)这个实体变成JSON格式返回到页面 ...

  8. jquery实现ajax提交表单数据或json数据

  9. 【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据

    原文:[ASP.NET Web API教程]5.2 发送HTML表单数据:URL编码的表单数据 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内 ...

随机推荐

  1. SQL调优日志--内存问题排查入门篇

    概述 很多系统的性能问题,是由内存导致的.内存不够会导致页面频繁换入换出,IO队列高,进而影响数据库整体性能. 排查 内存对数据库性能非常重要.那么我当出现问题的时候,我们怎么排查性能问题呢? 存在问 ...

  2. effective c++ 笔记 (5-8)

    //---------------------------15/03/26---------------------------- //#5    了解c++默默编写并调用哪些函数 { /* c++会 ...

  3. asp.net web api参数

    翻译自:http://www.c-sharpcorner.com/article/parameter-binding-in-asp-net-web-api/ 主要自己学习下,说是翻译,主要是把文章的意 ...

  4. unity过场动画组件Timeline

    Timeline是Unity2017版本中新加入的功能,可以非常方便的进行场景动画的创建和修改,包括物体.声音.粒子.动画.特效.自定义Playable以及子Timeline等多种资源进行整合,从而能 ...

  5. 利用链式队列(带头节点)解决银行业务队列简单模拟问题(c++)-- 数据结构

    题目: 7-1 银行业务队列简单模拟 (30 分)   设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

  6. 说说 Python 的变量以及简单数据类型

    1 变量 先来看一个示例: news="我国第一个人工智能规划问世"print(news) 运行结果: 可以看出使用 Python 定义变量很简单,甚至都不需要指定变量的类型. 1 ...

  7. mysql学习(4)python操作数据库

    整理了一下前面3期学的内容后,现在练习使用python去操作数据库 #!python3# coding:utf-8import pymysqlclass mysql_option(): def __i ...

  8. 《Linux内核分析》第一周——计算机是如何工作的?

    杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课程内容 1.诺曼依体系 ...

  9. 课堂讨论 alpha版最后总结

    议时间:组队开发最后总结会议   星期一   下午4:30-5:30 会议地点:学院楼自习室 到会人员:唐野野 胡潘华 王永伟 魏孟 会议概要: 1.展示最后开发成果: 2.交流开发过程心得体会: 会 ...

  10. 软件工程之四则运算--Github

    由于现在配置问题,然后借用同学电脑将代码上传至Github,网址为:https://github.com/be821/RealFour 参考相关Github文档: 1. http://my.oschi ...