博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7.Ajax
阅读量:6375 次
发布时间:2019-06-23

本文共 3947 字,大约阅读时间需要 13 分钟。

优先级

如果发送的是【普通数据】

  • jQuery
  • XMLHttpRequest
  • iframe

如果发送的是【文件】

  • iframe
  • jQuery(FormData)
  • XMLHttpRequest(FormData)

原生Ajax

 Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件)

1、XmlHttpRequest对象介绍

XmlHttpRequest对象的主要方法:

a. void open(String method,String url,Boolen async)   用于创建请求       参数:       method: 请求方式(字符串类型),如:POST、GET、DELETE...       url:    要请求的地址(字符串类型)       async:  是否异步(布尔类型) b. void send(String body)    用于发送请求     参数:        body: 要发送的数据(字符串类型) c. void setRequestHeader(String header,String value)    用于设置请求头     参数:        header: 请求头的key(字符串类型)        vlaue:  请求头的value(字符串类型) d. String getAllResponseHeaders()    获取所有响应头     返回值:        响应头数据(字符串类型) e. String getResponseHeader(String header)    获取响应头中指定header的值     参数:        header: 响应头的key(字符串类型)     返回值:        响应头中指定的header对应的值 f. void abort()     终止请求主要方法
主要方法
a. Number readyState   状态值(整数)    详细:      0-未初始化,尚未调用open()方法;      1-启动,调用了open()方法,未调用send()方法;      2-发送,已经调用了send()方法,未接收到响应;      3-接收,已经接收到部分响应数据;      4-完成,已经接收到全部响应数据; b. Function onreadystatechange   当readyState的值改变时自动触发执行其对应的函数(回调函数) c. String responseText   服务器返回的数据(字符串类型) d. XmlDocument responseXML   服务器返回的数据(Xml对象) e. Number states   状态码(整数),如:200、404... f. String statesText   状态文本(字符串),如:OK、NotFound...主要属性
主要属性

2.用原生Ajax做个请求

ajax.html

    

views.py

def ajax(request):    return render(request,'ajax.html') def ajax_json(request):    print(request.POST)    ret = {
'code':True,'data':None} import json return HttpResponse(json.dumps(ret))

 3.跨浏览器支持

XmlHttpRequest

  • IE7+, Firefox, Chrome, Opera, etc.

ActiveXObject("Microsoft.XMLHTTP")

  • IE6, IE5
    

XMLHttpRequest - Ajax请求

伪Ajax

 由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求,进行偷偷的发送请求

 views.py

def ajax(request):    return render(request,'ajax.html')def ajax_json(request):    print(request.POST)    ret = {
'code':True,'data':None} import json return HttpResponse(json.dumps(ret))

1.Form表单提交到iframe中,页面不刷新

 

    

2.Ajax提交到iframe中,页面不刷新

    

3.Form表单提交到iframe中,并拿到iframe中的数据

    

文件上传的三种方式

 原生Ajax、Ajax、伪Ajax进行上传文件

 views.py

from django.shortcuts import render,HttpResponsedef upload(request):    return render(request,'upload.html')def upload_file(request):    username = request.POST.get(('username'))    fafafa = request.FILES.get('fafafa')        #获取文件    with open(fafafa.name,'wb') as f:        for item in fafafa.chunks():            f.write(item)    print(username,fafafa)    ret = {
'code': True, 'data': request.POST.get('username')} import json return HttpResponse(json.dumps(ret))

1.原生Ajax(XmlHttpRequest)上传文件+定制好看的上传按钮:

    

2.JQuery进行文件的上传:

    
{# #}

上面两种方式都用到FormData(),但是如果是IE浏览器的话是不支持FormData(),所以就得用到下面这种方式

3.Iframe进行文件的上传:

    

上传文件时预览

 1.预览

views.py

def upload(request):    return render(request,'upload.html')  def upload_file(request):    username = request.POST.get(('username'))    fafafa = request.FILES.get('fafafa')        #获取文件    import os    img_path = os.path.join('static/imgs/',fafafa.name)     #static下创建imgs目录    with open(img_path,'wb') as f:        for item in fafafa.chunks():            f.write(item)    print(username,fafafa)    ret = {
'code': True, 'data': img_path} import json return HttpResponse(json.dumps(ret))

upload.html

    

2.选择文件后直接上传

    
//onchange 选中文件时触发{#
#}

转载地址:http://emtqa.baihongyu.com/

你可能感兴趣的文章
vue-element-admin 4.0.1 发布,后台集成方案
查看>>
sql左链接、内链接、右链接、全链接
查看>>
IOS-UI基础-按钮
查看>>
删除/添加/调用WordPress用户个人资料的联系信息
查看>>
POJ 3744 Scout YYF I 矩阵快速幂
查看>>
在linux下执行依赖多个jar的类的方法
查看>>
****** 二十五 ******、软设笔记【数据库】-数据库语言-数据定义、数据查询
查看>>
day7面向对象--反射
查看>>
文件打开方式
查看>>
ERROR 2002
查看>>
NET多线程探索-NET线程基础知识点
查看>>
Oracle 11g R2 新特性
查看>>
微信小程序新手知识
查看>>
java中数据流的简单介绍
查看>>
根据物流号查看物流信息
查看>>
jsp设置MIME类型
查看>>
python模拟自动登录网站(urllib2)
查看>>
Java 对文件的操作
查看>>
洛谷 题解 P3627 【[APIO2009]抢掠计划】
查看>>
springboot传入json和文件_SpringBoot系列教程22-整合SpringMVC之HttpMessageConverters
查看>>