Python开发【前端】:Ajax(一)
Ajax
- $.ajax({
- url: '/host', // 数据提交地址
- type: "POST", // 提交类型
- data: {'k1': 123, 'k2': "root"}, // 提交的内容 字典格式
- success: function(data){ // 客户端会一直等待服务端返回的数值
- // data是服务器端返回的字符串
- var obj = JSON.parse(data);
- }
- })
- 建议:永远让服务器端返回一个字典
- return HttpResponse(json.dumps(字典))
2、简单的前后端交互
- <div class="shade hide"></div>
- <div class="add-modal hide">
- <form method="POST" action="/home/">
- <div class="group">
- <input id='host' type="text" placeholder="主机名" name="hostname" />
- </div>
- <div class="group">
- <input id='ip' type="text" placeholder="IP" name="ip" />
- </div>
- <div class="group">
- <input id='port' type="text" placeholder="端口" name="port" />
- </div>
- <div class="group">
- <select id='sel' name="b_id">
- {% for op in b_list %}
- <option value="{{ op.id }}">{{ op.caption }}</option>
- {% endfor %}
- </select>
- </div>
- <input type="submit" value="提交" />
- <a id="ajax_submit">要上天提交</a>
- <input id="cancel" type="button" value="取消" />
- </form>
- </div>
index.html
Ajax代码:
- $(function(){
- $('#ajax_submit').click(function () {
- $.ajax({
- url:"/test_ajax/",
- type:"POST",
- data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
- success:function (data) {
- if(data=='OK'){
- location.reload() // 重新加载页面
- }else {
- alert(data);
- }
- }
- })
- })
- })
Django代码:
- def test_ajax(request):
- print(request.method)
- h = request.POST.get('hostname')
- i = request.POST.get('ip')
- p = request.POST.get('port')
- b = request.POST.get('b_id')
- print(h,i,p,b)
- if h and len(h) > 5: # 主机名长度判断
- models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b) # 创建数据
- return HttpResponse("OK") # 返回OK 严格大小写
- else:
- return HttpResponse("主机名太短") # 返回错误提示
3、对前后端交互完善(当后端有问题时,前端收不到data,页面无反应)
- <div class="add-modal hide">
- <form method="POST" action="/home/">
- <div class="group">
- <input id='host' type="text" placeholder="主机名" name="hostname" />
- </div>
- <div class="group">
- <input id='ip' type="text" placeholder="IP" name="ip" />
- </div>
- <div class="group">
- <input id='port' type="text" placeholder="端口" name="port" />
- </div>
- <div class="group">
- <select id='sel' name="b_id">
- {% for op in b_list %}
- <option value="{{ op.id }}">{{ op.caption }}</option>
- {% endfor %}
- </select>
- </div>
- <input type="submit" value="提交" />
- <a id="ajax_submit">要上天提交</a>
- <input id="cancel" type="button" value="取消" />
- <span id="error_msg"></span>
- </form>
- </div>
index.html
Ajax代码:
- $(function(){
- $('#ajax_submit').click(function () {
- $.ajax({
- url:"/test_ajax/",
- type:"POST",
- data:{'hostname':$('#host').val(),'ip':$('#ip').val(),'port':$('#port').val(),'b_id':$('#sel').val()},
- success:function (data) {
- console.log(data) // data {"data": null, "status": false, "error": "\u4e3b\u673a\u540d\u592a\u77ed"}
- var obj = JSON.parse(data); // 反序列化 把字符串data换成对象obj
- // 序列化 JSON.stringify() 把obj转换为字符串
- if(obj.status){
- location.reload() // 重新加载页面
- }else {
- $('#error_msg').text(obj.error)
- }
- }
- })
- })
- })
Django代码:
- import json
- def test_ajax(request):
- ret = {'status':True,'error':None,'data':None} # 返回一个字典
- try:
- h = request.POST.get('hostname')
- i = request.POST.get('ip')
- p = request.POST.get('port')
- b = request.POST.get('b_id')
- print(h,i,p,b)
- if h and len(h) > 5: # 主机名长度
- print("ok")
- models.Host.objects.create(hostname=h,ip=i,port=p,b_id=b)
- else:
- ret['status'] = False
- ret['error'] = '主机名太短'
- except Exception as e:
- ret['status'] = False
- ret['error'] = '请求错误'
- return HttpResponse(json.dumps(ret)) # 对字典进行序列化
4、serialize自动获取表单数据
- <form class="add-form" method="POST" action="/home/">
- <div class="group">
- <input id='host' type="text" placeholder="主机名" name="hostname" />
- </div>
- <div class="group">
- <input id='ip' type="text" placeholder="IP" name="ip" />
- </div>
- <div class="group">
- <input id='port' type="text" placeholder="端口" name="port" />
- </div>
- <div class="group">
- <select id='sel' name="b_id">
- {% for op in b_list %}
- <option value="{{ op.id }}">{{ op.caption }}</option>
- {% endfor %}
- </select>
- </div>
- <input type="submit" value="提交" />
- <a id="ajax_submit">要上天提交</a>
- <input id="cancel" type="button" value="取消" />
- <span id="error_msg"></span>
- </form>
index.html
Ajax代码:
- $.ajax({
- url:"/test_ajax/",
- type:"POST",
- data:$('.add-form').serialize(), // 获取表单数据提交 必须是form表单
- success:function (data) {
- })
5、Ajax代码补充(traditional,dataType)
Ajax代码:
- $(function(){
- $('#add_submit_ajax').click(function(){
- $.ajax({
- url: '/ajax_add_app',
- data: {'user': 123,'host_list': [1,2,3,4]},
- // data: $('#add_form').serialize(),
- type: "POST",
- dataType: 'JSON', // 内部对传过来的数据直接执行JSON.parse 拿到的数据直接为对象而非字符串
- traditional: true, // 添加此项 当字典里包含列表时候,后端可以getlist到里面的数据
- success: function(obj){
- console.log(obj);
- },
- error: function () { // 未知错误时执行,指前端收不到后台发送的obj时,执行
- }
- })
- });
- })
Django代码:
- def ajax_add_app(request):
- ret = {'status':True, 'error':None, 'data': None}
- app_name = request.POST.get('app_name')
- host_list = request.POST.getlist('host_list')
- obj = models.Application.objects.create(name=app_name)
- obj.r.add(*host_list)
- return HttpResponse(json.dumps(ret))
6、页面跳转和刷新
- $.ajax({
- url: '/index/',
- data: {'k': 'v', 'list': [1,2,3,4], 'k3': JSON.stringfy({'k1': 'v'}))}, $(form对象).serilize()
- type: 'POST',
- dataType: 'JSON':
- traditional: true,
- success:function(d){
- location.reload() # 刷新
- location.href = "某个地址" # 跳转
- }
- })
Python开发【前端】:Ajax(一)的更多相关文章
- Python开发【前端】:Ajax
Ajax Ajax即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = ...
- Python开发【前端】:jQuery
jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是&qu ...
- Python开发【前端】:DOM
DOM(文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页 ...
- Python开发【前端】:JavaScript
JavaScript入门 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...
- Python开发【前端】:CSS
css样式选择器 标签上设置style属性: <body> <div style="background-color: #2459a2;height: 48px;" ...
- Python开发【前端】:HTML
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...
- Python web前端 11 form 和 ajax
Python web前端 11 form 和 ajax 一.打开服务器 将handlers.py.httpd.py和libs.py三个文件放入新文件夹中,双击打开httpd.py文件即可 二.ajax ...
- 基于Flask开发网站 -- 前端Ajax异步上传文件到后台
大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来.如:从网页界面(前端)上传文件到服务器(后端). 放一下该模块的界面 ...
- Python开发【第一篇】:目录
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python开发[第一篇]:目录 Python开发[第二篇]:初识Python ...
随机推荐
- jquery-创建元素和添加子元素
一.创建新元素 1.使用$函数创建新元素 var $newElement=$('<div><p>段落</p></div>');//创建元素,返回jQue ...
- 资深投资人全力反击: VC增值平台从来就不是一坨狗屎
编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...
- 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html
数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树.算法的性能取决于树的形状,而树的形状取决于插入键的顺序.在最好的情况下,n个结点的树是完全平衡的,如下图“最好情况”所示,此时树 ...
- c++ ifstream
1.判断文件是否打开if(a.fail())if(!a.good())if(!a)上面3个等价 但上面的无法检测到 : 以不合适的文件模式打开文件失败a.is_open()可以检测到这个错误 所以推荐 ...
- 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 ...
- mybatise 动态sql
1. <if><choose> 动态sql 相当 <if> Java if 满足多个条件 <choose> <when> java ...
- org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from ...
- Android NDK开发-1-环境搭建
1.NDK介绍 Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”.众所周知,Android程序运行在Dal ...
- 经典 MapReduce框架(MRv1)
在 MapReduce 框架中,作业执行受两种类型的进程控制: 一个称为 JobTracker 的主要进程,它协调在集群上运行的所有作业,分配要在 TaskTracker 上运行的 map 和 red ...
- MFC-TCP连接代码片段(支援大富的)
BOOL CClientSocketTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); ........................ // T ...