ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据

ajax简介

前后台做数据交互

前后端做数据交互的方式(三种):    
(1)浏览器窗口输入地址(get的方式)
(2)form表单提交数据
(3)ajax提交数据

特点

特点:
  (
1)异步       异步与同步的区别:同步是请求发过去,要等着回应;异步不需要等待,可以进行其他操作   (2)局部刷新

使用

使用:
        (1)url:匹配的路由
        (2)type:发送的的方式
        (3)data:发送的数据
        (4)success:发送的数据成功回调条数

         $('.btn').click(function () {
             $.ajax({
                url:'/index/',
                type:'post',
                data:{"name":'lqz',"age":18},
                success:function (data) {
                    alert(data)
                }
            })
         });

        前端知识点:
            $('#id') : JQ获取标签
            $('#id').val() : 获取值
            js跳转页面:location.href = 'https://www.baidu.com/'

post 上传文件

# 知识要点:
# enctype="multipart/form-data"   # 传文件格式
# enctype="application/x-www-form-urlencoded"   # 默认格式

# 模板层:
<form action="/myfiles/" method="post" enctype="multipart/form-data">
  <input type="file" name="myfile">
  <input type="submit" value="提交">
</form>

# 视图层:
def myfiles(request):
  if request.method == 'GET':
    return render(request, 'myfiles.html')
  files = request.FILES     # 拿到字典 {'myfile': [<InMemoryUploadedFile: 111.png (image/png)>]}>
    my_file = files.get('myfile') # 取出文件流
    with open(my_file.name,'wb') as f:  # 写入文件
      for i in my_file:
        f.write(i)
    return HttpResponse('OK')

ajax 上传文件

# 知识要点:
# 传文件用 FormData 类
# 往对象里(字典)添加值

$('.btn').onclick(function () {
    var fordata = new FormData(); # 生成文件对象
    fordata.append('name',$('#name').val()); # 添加值
    fordata.append('myfiles',$('#myfiles')[0].files[0]); # 添加文件流
    
    $.ajax({
        url:'/ajaxfiles/',  # 路由
        type:'post',  # 请求的形式

        processData:false,  # 不指定编码方式(默认指定编码 urlencode)
        contentType:false,  # 不处理数据(默认处理数据:name=lxx &age=18)

        data:fordata,  # 传文件的数据
        success:function (data) {  # 请求成功回调函数
            alert(data)
        }
    })
})

ajax 提交 Json 格式的数据

# 知识要点:
# Json.stringify : 相当于序列化成字符串的形式
# Json.parse : 相当与反序列化

# $('.div').text('xx'):修改标签内容

# 发送Json格式的请求方式
# contentType:'application/json'

# 响应回来解析的方式(不管后台传过来的数据,都给我反序列化)
# dataType:'json',

# 返回用JsonResponse,Django自动反序列化


# 模板层:
$('.btn').click(function () {
    var post_data={'name':$("#name").val(),'pwd':$("#pwd").val()};
    var post=JSON.stringify(post_data);  # 序列化传到后台数据

    $.ajax({
        url:'/jsonfile/',
        type:'post',
        data:post, # 携带的数据
        contentType:'application/json',  # 发送json格式的数据的请求
        dataType:'json',   # 响应回来的解析方式
        success:function (data) {
            var ret=JSON.parse(data);  反序列化
        }
    })
})


# 视图层:
def add_json(request):
    if request.method=='GET':
        return render(request,'jsonfile.html')

    import json
    res=json.loads(request.body.decode('utf-8')) # json数据从body体内取值

    dic={'status':'100','msg':'登录成功'}
    # return HttpResponse('ok')
    # 返回给前台json格式
    # return HttpResponse(json.dumps(dic))
    return JsonResponse(dic)  # 直接返回json字符串

补充知识点


补充知识点(1)
JQ 显示文字 data.status
$('.div').text('xx'):修改标签内容

补充知识点(2)
静态文件导入(3种)

作业:
1 用户在表单输入用户名与密码,通过Ajax提交给服务器,服务器验证后返回响应信息,客户端通过响应信息确定是否登录成功,
成功,则跳转到百度,否则,在页面上显示相应的错误信息location.href='http://www.baidu.com'

2 两种提交数据的方式(urlencoded,json)

3 手动创建第三张表:
给红楼梦这本书新增lqz作者
给红楼梦这本书删除egon作者
把红楼梦这本书所有作者替换为lqz
查询红楼梦这本书所有作者的的姓名
查询作者名为lqz写的所有书
4 上课讲的敲一遍


ajax 上传文件/提交jsan格式的数据 前后端数据交互

 

posted @ 2018-11-28 23:12  星牧  阅读(14713)  评论(0编辑  收藏  举报