Ajax传递json数据简介和一个需要注意的小问题
Ajax传递json数据
Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例:
项目结构
我们新建一个Django项目,在里面创建一个名为app01
的应用:
python manage.py startapp app01
路由——我们在全局的urls.py
文件中加入一个index
路由:
from django.contrib import admin
from django.urls import path,re_path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^index/$',views.index ),
]
视图函数——视图函数中定义一个名为index
的函数:
from django.shortcuts import render,HttpResponse
def index(request):
if request.method == 'POST':
#请求报文中的请求体
print('body:',request.body)
#当contentType为urlencoded的时候,request.POST才有值
print('POST:',request.POST)
return HttpResponse('OK!')
return render(request,'index.html')
这里需要注意一下,windows中,在templates
包中加入index.html
文件之前需要在全局的settings.py
文件中的TEMPLATES
列表里的DIRS
改成下面这个列表而不是默认的空列表:
[os.path.join(BASE_DIR,'templates')]
然后,我们在templates
包中加入index.html
文件。
在里面加一个button:
<form method="post" >
<input id="btn" type="button" value="Ajax传递json数据">
</form>
js的代码如下:
$('#btn').click(function () {
$.ajax({
url:"/index/",
type:"post",
//告诉服务器本次数据编码用json格式
contentType:'application/json',
//对数据进行json序列化
data:JSON.stringify({a:1, b:2}),
success:function (data) {
console.log(data)
}
})
});
过程详解
这里,我们给button
定义一个click
事件,在进行ajax操作的时contentType
格式定义为'application/json'
,也就是说告诉服务器本次数据编码用json格式,接着将需要传递的数据进行json的序列化,然后传给后台。
在视图函数中,我们打印两个数据:request.body
与request.POST
,需要注意:request.POST
仅有在contentType
为urlencoded
的时候才有值,如果前端传递的数据格式为json
的时候只能在request.body
中看到数据。视图函数中打印的结果如下:
我们在浏览器中的NetWork中可以查看到contentType
的值为json
:
一个小问题
在前端部分,如果我们把input的type由button
改为submit
的话,上面的结果会出现下面的结果:
上面可以看到,我们的视图函数将body与POST结果打印了两次,而且contentType
的值竟然变成了urlencoded
!
这是因为submit会自动提交一次,而且“结果”会有异常:明明浏览器中的contentType
的值变成了urlencoded
,但是POST仍然打印不出来值!
因此,如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成button,即取消其自动提交的行为,否则,将会造成提交两次的效果!
关于submi
t和button
的区别这里转载其他作者的一篇文章供大家查阅:
http://blog.sina.com.cn/s/blog_693d183d0100uolj.html
将数据传给前端
当然,如果我们想将数据传给前端,可以加一条input<input type="text" id="hh">
,然后在js中这样写即可:
$('#btn').click(function () {
$.ajax({
url:'',
type:'post',
//告诉服务器本次数据编码用json格式
contentType:'application/json',
//对数据进行json序列化
data:JSON.stringify({a:1,b:2}), //application/json
success:function (data) {
console.log(data);
$('#hh').val(data)
}
})
})
效果如下:
Ajax传递json数据简介和一个需要注意的小问题的更多相关文章
- boke例子: freermarker:在使用ajax传递json数据的时候多出冒号
boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- Struts2中通过Ajax传递json数据
1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...
- ajax传递json数据,springmvc后台就收json数据
1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(jso ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- AngularJS学习笔记(3)——通过Ajax获取JSON数据
通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
jquery.tmpl.js 是一个模板js ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...
随机推荐
- CRM INBOX 查询结果增强字段
参考:https://blogs.sap.com/2013/03/25/how-to-integrate-new-result-list-attributes-into-the-agent-inbox ...
- kafka consumer 指定 offset,进行消息回溯
kafka consumer 如何根据 offset,进行消息回溯?下面的文档给出了 demo: https://cwiki.apache.org/confluence/display/KAFKA/0 ...
- kali-rolling安装使用sonarqube教程(docker方式)
一.说明 最近要找一款代码审计工具,Fortify SCA太贵,VisualCodeGrepper不太好用.在freebuf上看到可用sonarqube来建代码自动化扫描系统所以也来试一试. 直接安装 ...
- day062 中间件
中间件: 作用: 介于request和response之间的一到处理过程,相对比较轻量级,并且在全局上改变django的输入与输出,因为改变的是全局,所以需要谨慎使用,用不好会影响到性能. 当用户发 ...
- SHOW Syntax
MySQL 5.5 Reference Manual / SQL Statement Syntax / Database Administration Statements / SHOW ...
- win10安装Redis方法以及基本配置
下载 下载地址点击下载地址,然后选择版本进行下载 下载的文件是一个zip压缩文件,解压后目录结构为: 进行安装 进入命令行模式打开Redis的安装目录 执行:redis-server.exe redi ...
- lenet-5,Alexnet详解以及tensorflow代码实现
http://blog.csdn.net/OliverkingLi/article/details/73849228
- reduction_indices in tensorflow
https://www.cnblogs.com/likethanlove/p/6547405.html
- intelij idea设置和使用git
一.通过git从远程拉取代码到idea本地 1.git配置 2.通过git拉取远程仓库代码 图一: 图二: 3.下一步下一步即可 二.share本地仓库代码到git上 注意: 通过share会变成一个 ...
- ServiceStack.Redis遇到的问题:ServiceStack.Redis.Generic.RedisTypedClient`1”的方法“get_Db”没有实现。
问题: ServiceStack.Redis.Generic.RedisTypedClient`1”的方法“get_Db”没有实现. 解决方案: step 1::引用的三个 包版本保持一致 Servi ...