Ajax

  Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 JavaScriptXML标准通用标记语言的子集),AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面
1、初识
  1. $.ajax({
  2. url: '/host', // 数据提交地址
  3. type: "POST", // 提交类型
  4. data: {'k1': 123, 'k2': "root"}, // 提交的内容 字典格式
  5. success: function(data){    // 客户端会一直等待服务端返回的数值
  6. // data是服务器端返回的字符串
  7. var obj = JSON.parse(data);
  8. }
  9. })
  10.  
  11. 建议:永远让服务器端返回一个字典
  12. return HttpResponse(json.dumps(字典))

2、简单的前后端交互 

  1. <div class="shade hide"></div>
  2. <div class="add-modal hide">
  3. <form method="POST" action="/home/">
  4. <div class="group">
  5. <input id='host' type="text" placeholder="主机名" name="hostname" />
  6. </div>
  7.  
  8. <div class="group">
  9. <input id='ip' type="text" placeholder="IP" name="ip" />
  10. </div>
  11.  
  12. <div class="group">
  13. <input id='port' type="text" placeholder="端口" name="port" />
  14. </div>
  15.  
  16. <div class="group">
  17. <select id='sel' name="b_id">
  18. {% for op in b_list %}
  19. <option value="{{ op.id }}">{{ op.caption }}</option>
  20. {% endfor %}
  21. </select>
  22. </div>
  23. <input type="submit" value="提交" />
  24. <a id="ajax_submit">要上天提交</a>
  25. <input id="cancel" type="button" value="取消" />
  26.  
  27. </form>
  28.  
  29. </div>

index.html

Ajax代码:

  1. $(function(){
  2. $('#ajax_submit').click(function () {
  3. $.ajax({
  4. url:"/test_ajax/",
  5. type:"POST",
  6. data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
  7. success:function (data) {
  8. if(data=='OK'){
  9. location.reload() // 重新加载页面
  10. }else {
  11. alert(data);
  12. }
  13. }
  14. })
  15. })
  16. })

Django代码:

  1. def test_ajax(request):
  2. print(request.method)
  3. h = request.POST.get('hostname')
  4. i = request.POST.get('ip')
  5. p = request.POST.get('port')
  6. b = request.POST.get('b_id')
  7. print(h,i,p,b)
  8. if h and len(h) > 5: # 主机名长度判断
  9. models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b) # 创建数据
  10. return HttpResponse("OK")    # 返回OK 严格大小写
  11. else:
  12. return HttpResponse("主机名太短")  # 返回错误提示

  

3、对前后端交互完善(当后端有问题时,前端收不到data,页面无反应) 

  1. <div class="add-modal hide">
  2. <form method="POST" action="/home/">
  3. <div class="group">
  4. <input id='host' type="text" placeholder="主机名" name="hostname" />
  5. </div>
  6.  
  7. <div class="group">
  8. <input id='ip' type="text" placeholder="IP" name="ip" />
  9. </div>
  10.  
  11. <div class="group">
  12. <input id='port' type="text" placeholder="端口" name="port" />
  13. </div>
  14.  
  15. <div class="group">
  16. <select id='sel' name="b_id">
  17. {% for op in b_list %}
  18. <option value="{{ op.id }}">{{ op.caption }}</option>
  19. {% endfor %}
  20. </select>
  21. </div>
  22. <input type="submit" value="提交" />
  23. <a id="ajax_submit">要上天提交</a>
  24. <input id="cancel" type="button" value="取消" />
  25. <span id="error_msg"></span>
  26.  
  27. </form>
  28.  
  29. </div>

index.html

Ajax代码:

  1. $(function(){
  2. $('#ajax_submit').click(function () {
  3. $.ajax({
  4. url:"/test_ajax/",
  5. type:"POST",
  6. data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
  7. success:function (data) {
  8. console.log(data) // data {"data": null, "status": false, "error": "\u4e3b\u673a\u540d\u592a\u77ed"}
  9. var obj = JSON.parse(data); // 反序列化 把字符串data换成对象obj
  10. // 序列化 JSON.stringify() 把obj转换为字符串
  11. if(obj.status){
  12. location.reload() // 重新加载页面
  13. }else {
  14. $('#error_msg').text(obj.error)
  15. }
  16. }
  17. })
  18. })
  19. })

Django代码:  

  1. import json
  2. def test_ajax(request):
  3. ret = {'status':True,'error':None,'data':None} # 返回一个字典
  4. try:
  5. h = request.POST.get('hostname')
  6. i = request.POST.get('ip')
  7. p = request.POST.get('port')
  8. b = request.POST.get('b_id')
  9. print(h,i,p,b)
  10. if h and len(h) > 5: # 主机名长度
  11. print("ok")
  12. models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b)
  13. else:
  14. ret['status'] = False
  15. ret['error'] = '主机名太短'
  16. except Exception as e:
  17. ret['status'] = False
  18. ret['error'] = '请求错误'
  19. return HttpResponse(json.dumps(ret)) # 对字典进行序列化

4、serialize自动获取表单数据

  1. <form class="add-form" method="POST" action="/home/">
  2. <div class="group">
  3. <input id='host' type="text" placeholder="主机名" name="hostname" />
  4. </div>
  5.  
  6. <div class="group">
  7. <input id='ip' type="text" placeholder="IP" name="ip" />
  8. </div>
  9.  
  10. <div class="group">
  11. <input id='port' type="text" placeholder="端口" name="port" />
  12. </div>
  13.  
  14. <div class="group">
  15. <select id='sel' name="b_id">
  16. {% for op in b_list %}
  17. <option value="{{ op.id }}">{{ op.caption }}</option>
  18. {% endfor %}
  19. </select>
  20. </div>
  21. <input type="submit" value="提交" />
  22. <a id="ajax_submit">要上天提交</a>
  23. <input id="cancel" type="button" value="取消" />
  24. <span id="error_msg"></span>
  25.  
  26. </form>

index.html

Ajax代码:

  1. $.ajax({
  2. url:"/test_ajax/",
  3. type:"POST",
  4. data:$('.add-form').serialize(), // 获取表单数据提交 必须是form表单
  5. success:function (data) {
  6. })

5、Ajax代码补充(traditional,dataType)

Ajax代码:

  1. $(function(){
  2. $('#add_submit_ajax').click(function(){
  3. $.ajax({
  4. url: '/ajax_add_app',
  5. data: {'user': 123,'host_list': [1,2,3,4]},
  6. // data: $('#add_form').serialize(),
  7. type: "POST",
  8. dataType: 'JSON', // 内部对传过来的数据直接执行JSON.parse 拿到的数据直接为对象而非字符串
  9. traditional: true, // 添加此项 当字典里包含列表时候,后端可以getlist到里面的数据
  10. success: function(obj){
  11. console.log(obj);
  12. },
  13. error: function () { // 未知错误时执行,指前端收不到后台发送的obj时,执行
  14. }
  15. })
  16. });
  17. })

Django代码:

  1. def ajax_add_app(request):
  2. ret = {'status':True, 'error':None, 'data': None}
  3.  
  4. app_name = request.POST.get('app_name')
  5. host_list = request.POST.getlist('host_list')
  6. obj = models.Application.objects.create(name=app_name)
  7. obj.r.add(*host_list)
  8. return HttpResponse(json.dumps(ret))

6、页面跳转和刷新 

  1. $.ajax({
  2. url: '/index/',
  3. data: {'k': 'v', 'list': [1,2,3,4], 'k3': JSON.stringfy({'k1': 'v'}))}, $(form对象).serilize()
  4. type: 'POST',
  5. dataType: 'JSON':
  6. traditional: true,
  7. successfunction(d){
  8. location.reload() # 刷新
  9. location.href = "某个地址" # 跳转
  10. }
  11. })

  

 

  

 

Python开发【前端】:Ajax(一)的更多相关文章

  1. Python开发【前端】:Ajax

    Ajax Ajax即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = ...

  2. Python开发【前端】:jQuery

    jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...

  3. Python开发【前端】:DOM

    DOM(文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页 ...

  4. Python开发【前端】:JavaScript

    JavaScript入门 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...

  5. Python开发【前端】:CSS

    css样式选择器 标签上设置style属性: <body> <div style="background-color: #2459a2;height: 48px;" ...

  6. Python开发【前端】:HTML

    HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...

  7. Python web前端 11 form 和 ajax

    Python web前端 11 form 和 ajax 一.打开服务器 将handlers.py.httpd.py和libs.py三个文件放入新文件夹中,双击打开httpd.py文件即可 二.ajax ...

  8. 基于Flask开发网站 -- 前端Ajax异步上传文件到后台

    大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来.如:从网页界面(前端)上传文件到服务器(后端). 放一下该模块的界面 ...

  9. Python开发【第一篇】:目录

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python ...

随机推荐

  1. jquery-创建元素和添加子元素

    一.创建新元素 1.使用$函数创建新元素 var $newElement=$('<div><p>段落</p></div>');//创建元素,返回jQue ...

  2. 资深投资人全力反击: VC增值平台从来就不是一坨狗屎

    编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...

  3. 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html

    数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树.算法的性能取决于树的形状,而树的形状取决于插入键的顺序.在最好的情况下,n个结点的树是完全平衡的,如下图“最好情况”所示,此时树 ...

  4. c++ ifstream

    1.判断文件是否打开if(a.fail())if(!a.good())if(!a)上面3个等价 但上面的无法检测到 : 以不合适的文件模式打开文件失败a.is_open()可以检测到这个错误 所以推荐 ...

  5. mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept

    这种一般是等锁超时了,可以设置延长等锁时间. mysql> set innodb_lock_wait_timeout=100 Query OK, 0 rows affected (0.02 se ...

  6. mybatise 动态sql

    1. <if><choose> 动态sql 相当 <if> Java if  满足多个条件  <choose> <when>    java ...

  7. org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from

    org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from ...

  8. Android NDK开发-1-环境搭建

    1.NDK介绍 Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”.众所周知,Android程序运行在Dal ...

  9. 经典 MapReduce框架(MRv1)

    在 MapReduce 框架中,作业执行受两种类型的进程控制: 一个称为 JobTracker 的主要进程,它协调在集群上运行的所有作业,分配要在 TaskTracker 上运行的 map 和 red ...

  10. MFC-TCP连接代码片段(支援大富的)

    BOOL CClientSocketTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); ........................ // T ...