AJax技术

74、django之ajax补充

字号+ 作者:H5之家 来源:H5之家 2017-12-06 13:01 我要评论( )

赤峰新闻网为广大玩家提供最新、最全、最具特色的赤峰蜘蛛资讯,同时还有各种八卦奇闻趣事。看蜘蛛资讯,就来赤峰新闻网!

大别山_74、django之ajax补充

之前的ajax使用都是依据jquery来使用的,本篇会先分析ajax的原生的js代码实现,还有jsonp的介绍和最终使用。

本篇导航:

  • js实现的ajax
  • 同源策略与Jsonp
  • 一、js实现的ajax

    1、XMLHttpRequest对象

    其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象。所有的异步交互都是使用XMLHttpServlet对象完成的。

    var xmlHttp = new XMLHttpRequest() //(大多数浏览宿迁新闻网器都支持DOM2规范)

    兼容性解决

    function createXMLHttpRequest() { var xmlHttp; { xmlHttp = new XMLHttpRequest(); } catch (e) { { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){} } } return xmlHttp; }

    2、使用流程

    1)获取XMLHttpRequest对象

    var xmlHttp = createXMLHttpRequest();

    2)连接服务器

    xmlHttp.open("get", "/ajax_get/?a=1", true); xmlHttp.open("post", "/ajax_get/"); //第三个参数可以不给,默认值为true,表示异步请求;

    3)设置请求头

    xmlHttp.setRequestHeader("Content-Type","application/json"); var ele_csrf=document.getElementsByName("csrf张家界新闻网middlewaretoken")[0]; //html代码{% csrf_token %} xmlHttp.setRequestHeader("X-CSRFToken",ele_csrf.value); //csrf防御的一个解决方案

    4)发送数据

    xmlHttp.send(null) ; // 请求体数据

    没有数据需要发送null否则浏览器可能报错

    5)接受服务器响应

    XMLHttpRequest对象有一个onreadystatechange事件,它会在XMLHttpRequest对象的状态发生变化时被调用。下面介绍一下XMLHttpRequest对象的5种状态:

    0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法;

    1:请求已开始,open()方法已调用,但还没调用send()方法;

    2:请求发送完成状态,send()方法已调用;

    3:开始读取服务器响应;

    4:读取服务器响应结束。

    onreadystatechange事件会在状态为5种状态发生变化时引发。所以会发生4次

    xmlHttp.onreadystatechange = f九江新闻网unction() { alert("hello"); 代码会被执行四次,对应XMLHttpRequest的四次变化 };

    我们只关心最后一种状态,即读取服务器响应结束时,客户端才会做出改变。我们可以通过XMLHttpRequest对象的readyState属性来得到XMLHttpRequest对象的状态。

    xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4) { alert("hello"); } };

    其实我们还要关心服务器响应的状态码是否为200,其服务器响应为404,或500,那么就表示请求失败了。我们可以通过XMLHttpRequest对象的status属性得到服务器的状态码。

    xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState == 4 && xmlHttp.status == 200) { alert(xmlHttp.responseText); } };

    二、同源策略与Jsonp

    1、同源策略

    同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。

    2、最终实现

    1)8001的html

    <script> function f(){ $.ajax({ url:"http://127.0.0.1:7766/SendAjax/", dataType:"jsonp", json西双版纳新闻网p: "callbacks", jsonpCallback:"SayHi" }); } function SayHi(arg){ alert(arg); } </script>

    2)8002的views

    def SendAjax(request): import json HttpResponse() # return HttpResponse("func("%s")"%json.dumps(dic))

    3、通过回调函数来处理

    8001的html

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    网友点评