标签:alert root chrome boot 标签 渲染 操作 uil upload
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。
它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"}
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["张三", "李四"] }
[ { "name": "张三"}, {"name": "李四"}
属性名必须是双引号
不能使用十六进制数
不能使用undefined
不能使用函数和日期对象
属性名必须是双引号
不能使用十六进制数
不能使用undefined
不能使用函数和日期对象
JSON.stringify() #将用于将JavaScript值转换为JSON字符串
var data=JSON.stringify(‘{name:"Yang"}‘)
JSON.stringify() #将用于将JavaScript值转换为JSON字符串
var data=JSON.stringify(‘{name:"Yang"}‘)
JSON.parse() #将用于将JSON字符串转换为JavaScript对象
var data=JSON.parse(‘{"name":"Yang"}‘)
JSON.parse() #将用于将JSON字符串转换为JavaScript对象
var data=JSON.parse(‘{"name":"Yang"}‘)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var date=JSON.stringify(‘{name:"Yang"}‘); #序列化
console.log(date);
console.log(typeof date); #string json字符串
var date1=JSON.parse(‘{"name":"Yang"}‘); #反序列化
console.log(date1);
console.log(typeof date1) #object json对象
</script>
</head>
<body>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
var date=JSON.stringify(‘{name:"Yang"}‘); #序列化
console.log(date);
console.log(typeof date); #string json字符串
var date1=JSON.parse(‘{"name":"Yang"}‘); #反序列化
console.log(date1);
console.log(typeof date1) #object json对象
</script>
</head>
<body>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<country>
<name>中国</name>
<province>
<name>黑龙江</name>
<cities>
<city>哈尔滨</city>
<city>大庆</city>
</cities>
</province>
<province>
<name>广东</name>
<cities>
<city>广州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>台湾</name>
<cities>
<city>台北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>乌鲁木齐</city>
</cities>
</province>
</country>
<country>
<name>中国</name>
<province>
<name>黑龙江</name>
<cities>
<city>哈尔滨</city>
<city>大庆</city>
</cities>
</province>
<province>
<name>广东</name>
<cities>
<city>广州</city>
<city>深圳</city>
<city>珠海</city>
</cities>
</province>
<province>
<name>台湾</name>
<cities>
<city>台北</city>
<city>高雄</city>
</cities>
</province>
<province>
<name>新疆</name>
<cities>
<city>乌鲁木齐</city>
</cities>
</province>
</country>
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。
AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
ajax实现的局部刷新<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.error{
color:red
}
</style>
</head>
<body>
<form class="Form">
<p>姓名 <input class="v1" type="text" name="username" mark="用户名"></p>
<p>密码 <input class="v1" type="text" name="email" mark="邮箱"></p>
<p><input type="submit" value="submit"></p>
</form>
<script src="jquery-3.2.1.min.js"></script>
<script>
$(".Form :submit").click(function(){
flag=true;
$("Form .v1").each(function(){
var value=$(this).val();
if (value.trim().length==0){
var mark=$(this).attr("mark");
var $span=$("<span>");
$span.html(mark+"不能为空!");
$span.prop("class","error");
$(this).after($span);
setTimeout(function(){
$span.remove();
},800);
flag=false;
return flag;
}
});
return flag
});
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.error{
color:red
}
</style>
</head>
<body>
<form class="Form">
<p>姓名 <input class="v1" type="text" name="username" mark="用户名"></p>
<p>密码 <input class="v1" type="text" name="email" mark="邮箱"></p>
<p><input type="submit" value="submit"></p>
</form>
<script src="jquery-3.2.1.min.js"></script>
<script>
$(".Form :submit").click(function(){
flag=true;
$("Form .v1").each(function(){
var value=$(this).val();
if (value.trim().length==0){
var mark=$(this).attr("mark");
var $span=$("<span>");
$span.html(mark+"不能为空!");
$span.prop("class","error");
$(this).after($span);
setTimeout(function(){
$span.remove();
},800);
flag=false;
return flag;
}
});
return flag
});
</script>
</body>
</html>
当我们在百度中输入一个“老”字后,会马上出现一个下拉列表!列表中显示的是包含“传”字的4个关键字。
其实这里就使用了AJAX技术!当文件框发生了输入变化时,浏览器会使用AJAX技术向服务器发送一个请求,查询包含“传”字的前10个关键字,然后服务器会把查询到的结果响应给浏览器,最后浏览器把这4个关键字显示在下拉列表中。
jquery实现的Ajax
$.ajax({
url: "" ,// 请求路径
type:"" ,// 请求方式
success:function(data){
}
})
参数:
data:{"name":"yuan"}
if processData=false:不对数据做预处理,不涉及编码类型
if processData=true:
设计编码类型:
contentType:默认值: "application/x-www-form-urlencoded"
jquery实现的Ajax
$.ajax({
url: "" ,// 请求路径
type:"" ,// 请求方式
success:function(data){
}
})
参数:
data:{"name":"yuan"}
if processData=false:不对数据做预处理,不涉及编码类型
if processData=true:
设计编码类型:
contentType:默认值: "application/x-www-form-urlencoded"
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<a href="/get_OK/">点击</a><span class="error"></span>
<hr>
<p>姓名<input type="text"></p>
<p>密码<input type="password"></p>
<p><button class="Ajax_send">Ajax_send</button><span class="login_error"></span></p>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script>
$(".Ajax_send").click(function () {
// ajax请求
$.ajax({
url:"/get_ajax/",
type:"GET",
data:JSON.stringify({ // 接受用户的数据进行序列化
name:$(":text").val(),
pwd:$(":password").val()
}), // 请求数据 ,是js数据 ?name=yuan&pwd=123
contentType:"application/json",
success:function (data) { // success是返回的
var data=JSON.parse(data); // 进行反序列化JSON.parse(data)
console.log(data);
console.log(typeof data);
// $(".error").html(data)
if(!data["flag"]){
$(".login_error").html("用户名或者密码错误")
}
}
})
})
</script>
</body>
</html>
#================================================vivews
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
# import time
# time.sleep(10)
return render(request,"index.html")
def get_OK(request):
return render(request,"get_OK.html")
def get_ajax(request):
username=request.GET.get("name")
password=request.GET.get("pwd")
print(username,password)
response={"flag":False}
if username=="yuan" and password=="123":
response["flag"]=True
import json
import time
# time.sleep(10)
return HttpResponse(json.dumps(response))
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
</head>
<body>
<a href="/get_OK/">点击</a><span class="error"></span>
<hr>
<p>姓名<input type="text"></p>
<p>密码<input type="password"></p>
<p><button class="Ajax_send">Ajax_send</button><span class="login_error"></span></p>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script>
$(".Ajax_send").click(function () {
// ajax请求
$.ajax({
url:"/get_ajax/",
type:"GET",
data:JSON.stringify({ // 接受用户的数据进行序列化
name:$(":text").val(),
pwd:$(":password").val()
}), // 请求数据 ,是js数据 ?name=yuan&pwd=123
contentType:"application/json",
success:function (data) { // success是返回的
var data=JSON.parse(data); // 进行反序列化JSON.parse(data)
console.log(data);
console.log(typeof data);
// $(".error").html(data)
if(!data["flag"]){
$(".login_error").html("用户名或者密码错误")
}
}
})
})
</script>
</body>
</html>
#================================================vivews
from django.shortcuts import render,HttpResponse
# Create your views here.
def index(request):
# import time
# time.sleep(10)
return render(request,"index.html")
def get_OK(request):
return render(request,"get_OK.html")
def get_ajax(request):
username=request.GET.get("name")
password=request.GET.get("pwd")
print(username,password)
response={"flag":False}
if username=="yuan" and password=="123":
response["flag"]=True
import json
import time
# time.sleep(10)
return HttpResponse(json.dumps(response))
1. url:"/get_ajax/", #当触发事件是要跳转的页面
2. type:"GET", #指定用什么方式发送数据
3. data:JSON.stringify({ #当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式(urlencoded:?a=1&b=2)发送给服务端;此外,ajax默认以get方式发送请求。 // 接受用户的数据进行序列化
name:$(":text").val(),
pwd:$(":password").val()
}), // 请求数据 ,是js数据 ?name=yuan&pwd=123
4. contentType:"application/json", #默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;如果想以其他方式提交数据,比如contentType:"application/json",即向服务器发送一个json字符串:
5. success:function (data) { } #用于接收服务端返回的数据
6.processData:
#声明当前的data数据是否进行转码或预处理,默认为true,即预处理;if为false,那么对data:{a:1,b:2}会调用json对象的toString()方法,即{a:1,b:2}.toString(),最后得到一个[object,Object]形式的结果。
7.traditional:一般是我们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},
traditional为false会对数据进行深层次迭代;
1. url:"/get_ajax/", #当触发事件是要跳转的页面
2. type:"GET", #指定用什么方式发送数据
3. data:JSON.stringify({ #当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式(urlencoded:?a=1&b=2)发送给服务端;此外,ajax默认以get方式发送请求。 // 接受用户的数据进行序列化
name:$(":text").val(),
pwd:$(":password").val()
}), // 请求数据 ,是js数据 ?name=yuan&pwd=123
4. contentType:"application/json", #默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;如果想以其他方式提交数据,比如contentType:"application/json",即向服务器发送一个json字符串:
5. success:function (data) { } #用于接收服务端返回的数据
6.processData:
#声明当前的data数据是否进行转码或预处理,默认为true,即预处理;if为false,那么对data:{a:1,b:2}会调用json对象的toString()方法,即{a:1,b:2}.toString(),最后得到一个[object,Object]形式的结果。
7.traditional:一般是我们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},
traditional为false会对数据进行深层次迭代;
$.ajaxSetup({
data: {csrfmiddlewaretoken: ‘{{ csrf_token }}‘ },
});
$.ajaxSetup({
data: {csrfmiddlewaretoken: ‘{{ csrf_token }}‘ },
});
<script>
$(".btn-danger").click(function () {
$.ajaxSetup({
data: {csrfmiddlewaretoken: ‘{{ csrf_token }}‘ },
});
// ajax请求
$.post({
url:"/delbook/",
data:{
val:$(‘#data‘).text()
},
success:function (data) {
if (data){
$(‘#del‘).parent().parent().remove();
alert(‘成功‘)
}
}
})
})
</script>
<script>
$(".btn-danger").click(function () {
$.ajaxSetup({
data: {csrfmiddlewaretoken: ‘{{ csrf_token }}‘ },
});
// ajax请求
$.post({
url:"/delbook/",
data:{
val:$(‘#data‘).text()
},
success:function (data) {
if (data){
$(‘#del‘).parent().parent().remove();
alert(‘成功‘)
}
}
})
})
</script>
/**
* Created by root on 2017/11/14.
*/
$(".btn-danger").click(function () {
// ajax请求
$.post({
url:"/delbook/",
data:{
val:$(‘#data‘).text(),
csrfmiddlewaretoken:$("[name=‘csrfmiddlewaretoken‘]").val() #在html中通过csrf来后面是一个随机验证码,通过data来发送给服务器
},
success:function (data) {
if (data){
$(‘#del‘).parent().parent().remove();
alert(‘成功‘)
}
}
})
});
/**
* Created by root on 2017/11/14.
*/
$(".btn-danger").click(function () {
// ajax请求
$.post({
url:"/delbook/",
data:{
val:$(‘#data‘).text(),
csrfmiddlewaretoken:$("[name=‘csrfmiddlewaretoken‘]").val() #在html中通过csrf来后面是一个随机验证码,通过data来发送给服务器
},
success:function (data) {
if (data){
$(‘#del‘).parent().parent().remove();
alert(‘成功‘)
}
}
})
});
<script src="{% static ‘js/jquery.cookie.js‘ %}"></script>
$.ajax({
url:"/get_ajax/",
type:"POST",
headers:{"X-CSRFToken":$.cookie(‘csrftoken‘)},
data:{
name:$(":text").val(),
pwd:$(":password").val(),
}, // 请求数据 ,是js数据 ?name=yuan&pwd=123
<script src="{% static ‘js/jquery.cookie.js‘ %}"></script>
$.ajax({
url:"/get_ajax/",
type:"POST",
headers:{"X-CSRFToken":$.cookie(‘csrftoken‘)},
data:{
name:$(":text").val(),
pwd:$(":password").val(),
}, // 请求数据 ,是js数据 ?name=yuan&pwd=123
serialize()
函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串。
serialize()
函数常用于将表单内容序列化,以便用于AJAX提交。
该函数主要根据用于提交的有效表单控件的name和value,将它们拼接为一个可直接用于表单提交的文本字符串,该字符串已经过标准的URL编码处理(字符集编码为UTF-8)。
该函数不会序列化不需要提交的表单控件,这和常规的表单提交行为是一致的。例如:不在<form>标签内的表单控件不会被提交、没有name属性的表单控件不会被提交、带有disabled属性的表单控件不会被提交、没有被选中的表单控件不会被提交
当input框过多时,通过ajax发送的话键值对要自己写太多了,是不是很麻烦。
1
jQueryObject.serialize( )
1
jQueryObject.serialize( )
serialize()
函数的返回值为String类型,返回将表单元素编码后的可用于表单提交的文本字符串。def upload(request):
if request.method=="POST":
print(request.POST) #post请求拿不到具体的数据,只能拿到图片的名字
f_obj=request.FILES.get("upload_file_form") #通过FILES.get拿到input框中的文件的name,然后获得一个文件句柄
# s=open()
print(f_obj.name)
with open(f_obj.name,"wb") as s: #二进制读取
for i in f_obj:
print(i)
s.write(i) #然后把内容保存进去
return render(request,"uploading.html")
#==============================================前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p><input type="file" name="upload_file_form"></p>
<input type="submit">
</form>
</body>
</html>
def upload(request):
if request.method=="POST":
print(request.POST) #post请求拿不到具体的数据,只能拿到图片的名字
f_obj=request.FILES.get("upload_file_form") #通过FILES.get拿到input框中的文件的name,然后获得一个文件句柄
# s=open()
print(f_obj.name)
with open(f_obj.name,"wb") as s: #二进制读取
for i in f_obj:
print(i)
s.write(i) #然后把内容保存进去
return render(request,"uploading.html")
#==============================================前端页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p><input type="file" name="upload_file_form"></p>
<input type="submit">
</form>
</body>
</html>
FormData是什么呢?
FormData
.利用FormData对象
,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()
方法来异步的提交这个"表单".比起普通的ajax,使用FormData
的最大优点就是我们可以异步上传一个二进制文件.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% csrf_token %}
<form action="" id="s1">
<p>姓名<input type="text"></p>
<p>密码<input type="password"></p>
<p>头像<input type="file" id="upload_avatar"></p>
</form>
<p><button class="Ajax_send">Ajax_send</button><span class="login_error"></span></p>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function foo() {
$(".login_error").html("")
}
$(".Ajax_send").click(function () {
var formData=new FormData();
formData.append("username",$(":text").val());
formData.append("password",$(":password").val());
formData.append("avatar",$("#upload_avatar")[0].files[0]); #找到这个input框中上传的二进制文件只能上传一个
// ajax请求
$.ajax({
url:"/delbook/",
type:"POST",
headers:{"X-CSRFToken":$.cookie(‘csrftoken‘)},
data:formData,
contentType:false,
processData:false,
success:function (data) {
var data=JSON.parse(data);
console.log(data);
console.log(typeof data);
// $(".error").html(data)
if(!data["flag"]){
$(".login_error").html("用户名或者密码错误")
setTimeout(foo,3000)
}
}
})
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% csrf_token %}
<form action="" id="s1">
<p>姓名<input type="text"></p>
<p>密码<input type="password"></p>
<p>头像<input type="file" id="upload_avatar"></p>
</form>
<p><button class="Ajax_send">Ajax_send</button><span class="login_error"></span></p>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function foo() {
$(".login_error").html("")
}
$(".Ajax_send").click(function () {
var formData=new FormData();
formData.append("username",$(":text").val());
formData.append("password",$(":password").val());
formData.append("avatar",$("#upload_avatar")[0].files[0]); #找到这个input框中上传的二进制文件只能上传一个
// ajax请求
$.ajax({
url:"/delbook/",
type:"POST",
headers:{"X-CSRFToken":$.cookie(‘csrftoken‘)},
data:formData,
contentType:false,
processData:false,
success:function (data) {
var data=JSON.parse(data);
console.log(data);
console.log(typeof data);
// $(".error").html(data)
if(!data["flag"]){
$(".login_error").html("用户名或者密码错误")
setTimeout(foo,3000)
}
}
})
</script>
</body>
</html>
标签:alert root chrome boot 标签 渲染 操作 uil upload
原文地址:http://www.cnblogs.com/zcfx/p/7895403.html