博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax请求
阅读量:5024 次
发布时间:2019-06-12

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

本文会介绍三种ajax的请求方式:

  • 原生的ajax请求
  • JQuery的ajax的请求
  • 伪造ajax请求

在一个网站上看到ajax是什么的一些说法:

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

在使用form表单提交数据与后台进行交互的时候,是会刷新整个页面的,也就是会重新拉取整个页面的数据。而ajax做的就是局部刷新。只刷新部分页面,而不是刷新整个页面。

所有的实例以python3.6,django-1.10.8版本!

原生ajax:

ajax是基于现有的internet标准,并联合使用它们。包括以下的内容:

  • XMLHttpRequest 对象 (异步的与服务器交换数据)
  • JavaScript/DOM (信息显示/交互)
  • CSS (给数据定义样式)
  • XML (作为转换数据的格式)

使用ajax:

  ajax的在使用中5个步骤:

  1. 创建XMLHttpResquest对象。
  2. 链接服务器
  3. 发送数据
  4. 设定回调函数
  5. 在回调函数中对服务器返回的数据进行处理

下面的一些ajax的函数,用于在上面的五个步骤中使用。

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

通过一个简单的django实例,说明原生ajax的用法:

 视图函数如下:

from django.shortcuts import render, HttpResponse# Create your views here.import jsondef ajax1(request):    return render(request, "ajax1.html")def ajax1_json(request):    print(request.POST)    msg = {
"code": 200, "msg": "What a fuck!"} return HttpResponse(json.dumps(msg))

简易的前端代码如下:

    
测试ajax请求

第一行内容

原生ajax请求的前端代码

上面的代码正常允许需要注释掉django中间件中有关csrf的认证,下面我们在ajax中加入csrftoken,但是引入了jquery。

    
test ajax

第一行内容

 

jQuery ajax请求

jQuery封装了原始的ajax请求,因此使用jQuery请求会更方便一点。其模板文件如下:

    
Title

第一行内容

JQuery模板文件

视图函数如下:

def jquery_ajax(request):    if request.method == "GET":        return render(request, "jquery_ajax.html")    elif request.method == "POST":        msg = {"code": 200, "msg": "What a fuck!"}        return HttpResponse(json.dumps(msg))

由以上的模板文件,可以发现JQuery中ajax请求,基本格式如下:

$.ajax({                url: "jquery_ajax",   #ajax要传入的url                type: "POST",        #传递数据的类型                data: {"user":"root", "password":"123456"}, # 要传递的数据                dataType: "json",   #接收数据的类型                /*dataType制定接受后端返回数据的格式,这个例子中如果不使用这个参数,接受的data数据,可以使用JSON.parse转换为json对象*/                success: function (data) {  #服务端响应成功后的回调函数                    console.log(data);                    $("h1").text(data.msg);                }            })

伪造ajax

可以利用html标签中的iframe标签伪造ajax请求,iframe标签会自动向后台提交数据。

iframe的前端代码如下:

    
伪造ajax请求
iframe模板代码

视图函数如下:

def ajax1_json(request):    print(request.POST)    msg = {
"code": 200, "msg": "What a fuck!"} return HttpResponse(json.dumps(msg))def wzajax(request): return render(request, "wzajax.html")

上面的三种ajax请求,一般若是传递的数据是文件,图片等一般数据优先使用iframe伪造ajax请求,然后使用jQuery,最后使用原生ajax。

iframe的标签是作为一个html文本嵌套在原html标签中的。iframe中的值,是服务端返回的值。注意在上面前端代码中,查找jframe标签值得方法。

利用三种ajax传递一张图片。

用三种方式上传一张照片,用iframe的方式实现预览的功能,前端代码如下:

    
Title

上传照片

对应的视图函数如下:

def upload(request):    if request.method == "GET":        return render(request, "upload.html")    elif request.method == "POST":        username = request.POST.get("username")        print("username")        file1 = request.FILES.get("file1")        print(file1)        img_path = os.path.join("static/img/", file1.name)        with open(img_path, "wb") as f:            for item in file1.chunks():                f.write(item)        msg = {
"code": 200, "img_msg": img_path} return HttpResponse(json.dumps(msg))

 

转载于:https://www.cnblogs.com/wxzhe/p/9655079.html

你可能感兴趣的文章
SSAS使用MDX生成脱机的多维数据集CUB文件
查看>>
ACM_hdu1102最小生成树练习
查看>>
MyBatis源码分析(一)--SqlSessionFactory的生成
查看>>
android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
查看>>
CTF常用工具之汇总
查看>>
java的面向对象 (2013-09-30-163写的日志迁移
查看>>
HDU 2191 【多重背包】
查看>>
51nod 1433 0和5【数论/九余定理】
查看>>
【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】
查看>>
less 分页显示文件内容
查看>>
如何对数据按某列进行分层处理
查看>>
[Qt] this application failed to start because it could not find or load the Qt platform plugin
查看>>
Git Submodule管理项目子模块
查看>>
学会和同事相处的30原则
查看>>
NOJ——1568走走走走走啊走(超级入门DP)
查看>>
文件操作
查看>>
Python:GUI之tkinter学习笔记3事件绑定(转载自https://www.cnblogs.com/progor/p/8505599.html)...
查看>>
jquery基本选择器
查看>>
hdu 1010 dfs搜索
查看>>
搭建wamp环境,数据库基础知识
查看>>