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.bodyrequest.POST,需要注意:request.POST仅有在contentTypeurlencoded的时候才有值,如果前端传递的数据格式为json的时候只能在request.body中看到数据。视图函数中打印的结果如下:

我们在浏览器中的NetWork中可以查看到contentType的值为json:

一个小问题

在前端部分,如果我们把input的type由button改为submit的话,上面的结果会出现下面的结果:



上面可以看到,我们的视图函数将body与POST结果打印了两次,而且contentType的值竟然变成了urlencoded
这是因为submit会自动提交一次,而且“结果”会有异常:明明浏览器中的contentType的值变成了urlencoded,但是POST仍然打印不出来值!
因此,如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成button,即取消其自动提交的行为,否则,将会造成提交两次的效果!
关于submit和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数据简介和一个需要注意的小问题的更多相关文章

  1. boke例子: freermarker:在使用ajax传递json数据的时候多出冒号

    boke例子: freermarker:在使用ajax传递json数据的时候多出冒号 json数据是用JSON.stringify()格式化的数据,然后用ajax传递,发现数据多出一个冒号:, 后来度 ...

  2. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)

    form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...

  3. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  4. ajax传递json数据,springmvc后台就收json数据

    1.ajax数据的封装 var json = {"token":token};//封装json数据 $.ajax({ url:'', data:JSON.stringify(jso ...

  5. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  6. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  7. AngularJS学习笔记(3)——通过Ajax获取JSON数据

    通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...

  8. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  9. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

随机推荐

  1. javascript的event loop事件循环

    javascript的event loop事件循环 这是今天一个朋友发给我的一个面试题, 感觉还挺有意思的, 写个博客以供分享 先看看这个面试题目: 观察下面的代码,写出输出结果 console.lo ...

  2. 命令行听歌http://www.linuxsir.org/bbs/thread280142.html?pageon=1#1584689

    在纯字符界面下听歌 利用 play 命令可以在命令行中播放音频文件,在纯字符界面下也没问题! ----------------------------------------------------- ...

  3. PHP 第三方支付

    以前事情比较繁忙,压根都没有时间去整理最近的工作. 最近稍微轻松点,就把自己在公司处理的支付业务拿出来,留个纪念,顺道回顾下以前自己支付的知识. 俗话说实践是检验整理的唯一标准,东西做的是否能用,只能 ...

  4. SEH X86

    ( windows 提供的异常处理机制实际上只是一个简单的框架,一般情况下开发人员都不会直接用到.我们通常所用的异常处理(比如 C++ 的 throw.try.catch)都是编译器在系统提供的异常处 ...

  5. Python选修课第一届Turtle绘图大赛田康林赵冰珂组

    点击此处查看视频 from turtle import* setup(600,600,200,200) #脸 penup() goto(-190,0) seth(-90) pendown() penc ...

  6. 基于vue移动音乐webapp跨域请求失败的问题解决

    在学习一位vue大牛的课程<VUE2.0移动端音乐App开发>时,由于vue的版本原因遇到了一些问题 这是其中之一,花费了很多的时间去解决 虽然搞定了这个问题,但是很多东西理解也不是很到位 ...

  7. 什么是Maven项目

    1.通俗理解Maven:https://blog.csdn.net/shuzhe66/article/details/45009175 个人总结: Maven项目会有pom文件! 当前的项目需要依赖其 ...

  8. mysql中有关查询的技巧方法

    * 查最高值或者最低值对应行的数据: 查询Score表中的最高分的学生学号和课程号: 两种方法(子查询或者排序): 子查询法:select sno,cno from score where degre ...

  9. Python函数定义、文件操作(读写、修改)

    date:2018421 day3 一.函数定义 def  函数名(首字母大写) 增加程序可读性 #直接写函数名即可调用函数 #参数 ①.形参 ②.实参 ③.缺省参数 如果有默认值,调用的时候没有传递 ...

  10. zabbix3.4安转

    其实很简单  在官网上有安装文档,我只不过是将官网上的拿了下来 安装apache和php 数据库mariadb(我的系统是centos7的所以安装mariadb) 开始zabbix的安装 本次实验 系 ...