AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即便用Javascript语言与服务器进行异步交互,传输的数据为XML(固然,传输的数据不仅是XML,如今更多使用json数据)。html
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。python
AJAX 最大的优势是在不从新加载整个页面的状况下,能够与服务器交换数据并更新部分网页内容。(这一特色给用户的感觉是在不知不觉中完成请求和响应过程)jquery
AJAX 不须要任何浏览器插件,但须要用户容许JavaScript在浏览器上执行。ajax
a.同步交互:客户端发出一个请求后,须要等待服务器响应结束后,才能发出第二个请求;django
b.异步交互:客户端发出一个请求后,无需等待服务器响应结束,就能够发出第二个请求。编程
AJAX除了异步的特色外,还有一个就是:浏览器页面局部刷新;(这一特色给用户的感觉是在不知不觉中完成请求和响应过程json
页面输入两个整数,经过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项目,而后运行看看效果,页面不刷新
搜索引擎根据用户输入的关键字,自动提示检索关键字。
还有一个很重要的应用场景就是注册时候的用户名的查重。
其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,而后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展现出来。
a.整个过程当中页面没有刷新,只是刷新页面中的局部位置而已!
b.当请求发出后,浏览器还能够进行其余操做,无需等待服务器的响应!
当输入用户名后,把光标移动到其余表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为lemontree7777777的用户是否存在,最终服务器返回true表示名为lemontree7777777的用户已经存在了,浏览器在获得结果后显示“用户名已被注册!”。
a.整个过程当中页面没有刷新,只是局部刷新了;
b.在请求发出后,浏览器不用等待服务器响应结果就能够进行其余操做;
1.AJAX使用JavaScript技术向服务器发送异步请求;
2.AJAX请求无须刷新整个页面;
3.由于服务器响应内容再也不是整个页面,而是页面中的部份内容,因此AJAX性能高;
<button class="send_Ajax">send_Ajax</button> <script> $(".send_Ajax").click(function(){ $.ajax({ url:"/handle_Ajax/", type:"POST", data:{username:"chao",password:123}, success:function(data){ console.log(data) }, error: function (jqXHR, textStatus, err) { console.log(arguments); }, complete: function (jqXHR, textStatus) { console.log(textStatus); }, statusCode: { '403': function (jqXHR, textStatus, err) { console.log(arguments); }, '400': function (jqXHR, textStatus, err) { console.log(arguments); } } }) }) </script>
var b2 = document.getElementById("b2"); b2.onclick = function () { // 原生JS var xmlHttp = new XMLHttpRequest(); xmlHttp.open("POST", "/ajax_test/", true); xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlHttp.send("username=chao&password=123456"); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { alert(xmlHttp.responseText); } }; };
$.ajax({ url: "/cookie_ajax/", type: "POST", data: { "username": "anwe", "password": 123456, "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val() // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中 }, success: function (data) { console.log(data); } })
$.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, });
ContentType指的是请求体的编码类型,常见的类型共有3种:
这应该是最多见的 POST 提交数据的方式了。浏览器的原生