一 、Ajax简介

  1.1 简介:

    AJAXAsynchronous Javascript And XML)翻译成中文就是异步的JavascriptXML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

    AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

    AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

      a.同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;

      b.异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

   AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

  基于ajax简单示例:


页面输入两个整数,通过AJAX传输到后端计算出结果并返回。

html文件名称为ajax_demo1.html,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>AJAX局部刷新实例</title>
</head>
<body>

<input type="text" id="i1">+
<input type="text" id="i2">=
<input type="text" id="i3">
<input type="button" value="AJAX提交" id="b1">

<script src="/static/jquery-3.2.1.min.js"></script>
<script>
  $("#b1").on("click", function () {
    $.ajax({
      url:"/ajax_add/", //别忘了加双引号
      type:"get",  
      data:{"i1":$("#i1").val(),"i2":$("#i2").val()}, //object类型,键值形式的,可以不给键加引号
      success:function (data) {
        $("#i3").val(data);
      }
    })
  })
</script>
</body>
</html>

views.py里面的内容:
def ajax_demo1(request):
    return render(request, "ajax_demo1.html")


def ajax_add(request):
    #time.sleep(10)  #不影响页面发送其他的请求
    i1 = int(request.GET.get("i1"))
    i2 = int(request.GET.get("i2"))
    ret = i1 + i2
    return JsonResponse(ret, safe=False)
    #return render(request,'index.html')  #返回一个页面没有意义,就是一堆的字符串,拿到了这个页面,你怎么处理,你要做什么事情,根本就没有意义

urls.py里面的内容:
urlpatterns = [
    ...
    url(r'^ajax_add/', views.ajax_add),
    url(r'^ajax_demo1/', views.ajax_demo1),
    ...   
]

启动django项目,然后运行看看效果,页面不刷新,只是刷新页面中的局部位置而已!

  1.2 AJAX常见应用情景:

  搜索引擎根据用户输入的关键字,自动提示检索关键字。

    还有一个很重要的应用场景就是注册时候的用户名的查重。

    其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来

    a.整个过程中页面没有刷新,只是刷新页面中的局部位置而已!

    b.当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应!

的优缺点:

  get,post方法都能向后台提交数据

  优点:

  1.AJAX使用JavaScript技术向服务器发送异步请求;

  2.AJAX请求无须刷新整个页面;

  3.因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高;

  注意:

  1、如果你想通过ajax来删除表格中某条记录,并且ajax里面的url不写死的情况下(url反向解析),那么就需要下面这种方式,实现url里面参数的动态:

  python项目Django(AJAX)

  2、ajax里面写$(this)时要注意的问题:还有一点注意,如果你添加某些dom对象的时候,如果你想在不刷新页面的情况下来添加这个对象,那么你要注意,如果这个对象也需要绑定事件的话,你需要用on来给和他相同的标签对象来绑定事件。

   python项目Django(AJAX)

  3. 网页AJAX加载的选项,F12打开开发者选项,network下面的XHR的ajax加载的文件位置

  python项目Django(AJAX)

  1.4 AJAX的POST请求实例(基于用户登录验证):

  
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div>
    用户名:<input type="text" id="username">
    密码:<input type="text" id="pwd">
    {% csrf_token %}
    <button id="sub">提交</button>
    <span style="color: red;font-size: 12px;" id="error"></span>
</div>

<script src="{% static 'jquery.js' %}"></script>

<script>
    $('#sub').click(function () {
        $.ajax({
            url:"{% url 'login' %}",
            type:'post',
            data:{username:$('#username').val(),pwd:$('#pwd').val(),csrfmiddlewaretoken:$('[name=csrfmiddlewaretoken]').val()},

            success:function (data) {
                data = JSON.parse(data);
                console.log(data,typeof data);
                if (data['status']){

                    location.href=data['home_url'];
                }
                else {
                    $('#error').text('用户名或者密码错误!')
                }
            }

        })


    })



</script>

</body>
</html>
login.html

相关文章: