xml地图|网站地图|网站标签 [设为首页] [加入收藏]
自学成才之路,使用else代替状态变量
分类:编程

翻看公司的代码文档,在代码风格文档中,写着:为了提高代码的可维护性,代码中减少flag这类状态变量的使用。这个问题,平时确实没有想过,面对这种需求时,第一反应就是使用flag标记状态。那么使用什么样的技巧或代码结构才能,才能代替状态变量的使用呢?我想到的方法是应用else。

如果大家觉得我说得不好,千万要谅解。

一、什么是AJAX

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

特点:

  • 与服务器异步交互
  • 浏览器页面局部刷新(不知不觉中完成请求和相应过程,用户体验更好)

同步交互与异步交互:

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

图片 1图片 2

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 
 7 <script type="text/javascript">
 8 window.onload = function() {//当文档加载完毕时执行本函数
 9     var form = document.getElementById("form1");//获取表单元素对象
10     form.onsubmit = function() {//给表单元素添加一个监听,监听表单被提交事件
11         var usernameValue = form.username.value;//获取表单中名为username的表单元素值
12         if(!usernameValue) {//判断该值是否为空
13             var usernameSpan = document.getElementById("usernameSpan");//得到usernmae元素后的元素
14             usernameSpan.innerText = "用户名不能为空!";//设置span元素内容!
15             return false;//返回false,表示拦截了表单提交动作
16         }
17         return true;//不拦截表单提交动作
18     };
19 };
20 </script>
21 </head>
22  <body>
23 <h1>注册页面</h1>
24 <form action="" method="post" id="form1">
25 用户名:<input type="text" name="username"/>
26 
27 <br/>
28 密 码:<input type="password" name="password"/>
29 
30 <br/>
31 <input type="submit" value="注册"/>
32 
33 </form>
34   </body>
35 </html>
36 
37 js实现的局部刷新

Demo

说到else,最常用的语法是if-elif-else,实际上else是可以与循环和try搭配使用的,下面我写了一个else替换状态变量的例子,使用插入法对数组排序。首先使用状态变量实现,代码如下:

以我八年的工作经验来看,学一门编程语言是很简单的事,但是学好它是很难的事。我记忆比较尤新的事就是学会了很不好的毛病,就是太难的不想学,太简单瞧不起,很快坚持不了几天就放弃了。所以我想告诉大家学技术的路是寂寞的,孤独的。所以一定要有心里准备才开始做,不然你又会变成“半吊子”。废话不多说,跟大家说说学习方法吧。

二、AJAX常见应用情景

图片 3

当我们在百度中输入一个“老”字后,会马上出现一个下拉列表!列表中显示的是包含“传”字的4个关键字。

其实这里就使用了AJAX技术!当文件框发生了输入变化时,浏览器会使用AJAX技术向服务器发送一个请求,查询包含“传”字的前10个关键字,然后服务器会把查询到的结果响应给浏览器,最后浏览器把这4个关键字显示在下拉列表中。

  • 整个过程中页面没有刷新,只是刷新页面中的局部位置而已!
  • 当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应!

 图片 4

当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为zhangSan的用户是否存在,最终服务器返回true表示名为lemontree7777777的用户已经存在了,浏览器在得到结果后显示“用户名已被注册!”。

  • 整个过程中页面没有刷新,只是局部刷新了;
  • 在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;
def insertion_sort(input_list):
    if len(input_list) <= 1:
        return input_list
    _sorted = input_list[:1]

    for i in input_list[1:]:
        inserted = False
        for j in xrange(len(_sorted)):
            if i <= _sorted[j]:
                _sorted.insert(j, i)
                inserted = True
                break
        if not inserted:
            _sorted.append(i)
    return _sorted

以下是我总结的方法,具体如下:

 三、AJAX的优缺点

使用inserted来标记新元素是否执行了插入操作,如果未执行的话,将元素插入到末位。

1.摆正心态,量力而行。

优点:

  • AJAX使用Javascript技术向服务器发送异步请求;
  • AJAX无须刷新整个页面;
  • 因为服务器响应内容不再是整个页面,而是页面中的局部,所以AJAX性能高;

下面给出使用else替换inserted的代码实现:

   很多学习爱好者为啥达不到高境界就是因为过于匆忙,心急,结果学习成为负担,坚持不下去了,这里我要重点说明的就是人的接受的量是有限的,所以不要超过你的极限。只要能按照计划完成就行。

缺点:

  • AJAX并不适合所有场景,很多时候还是要使用同步交互;
  • AJAX虽然提高了用户体验,但无形中向服务器发送的请求次数增多了,导致服务器压力增大;
  • 因为AJAX是在浏览器中使用Javascript技术完成的,所以还需要处理浏览器兼容性问题;

 

2.学习计划,多变多样化。

 四、AJAX技术

def insertion_sort1(input_list):
    if len(input_list) <= 1:
        return input_list
    _sorted = input_list[:1]

    for i in input_list[1:]:
        for j in xrange(len(_sorted)):
            if i <= _sorted[j]:
                _sorted.insert(j, i)
                break
        else:
            _sorted.append(i)
    return _sorted

   我这里强调我不是学习好的人,但我知道学习计划有和没有的区别很大,知道自己要做什么跟不知道比较的话,效率能提高不少,所以我希望大家以后学什么先做好计划,然后按照计划坚持做下去。当然我现在要教的不是这个,我要说的是计划的可变性与多样性,也就是说按照自己需求可以做变通,也可以不同方式方法做计划,我这样说很多人不理解,我举个例子,今天心情不好,我少学点或休息。做计划的目的是能完成的,不修改计划的话,我之前计划白做了,对不对?

四步操作:

  • 创建核心对象;
  • 使用核心对象打开与服务器的连接;
  • 发送请求
  • 注册监听,监听服务器响应。

 

3.总结精华,分类分功能。

XMLHTTPRequest

  • open(请求方式, URL, 是否异步)
  • send(请求体)
  • onreadystatechange,指定监听函数,它会在xmlHttp对象的状态发生变化时被调用
  • readyState,当前xmlHttp对象的状态,其中4状态表示服务器响应结束
  • status:服务器响应的状态码,只有服务器响应结束时才有这个东东,200表示响应成功;
  • responseText:获取服务器的响应体

当for循环执行完整,中途没有break的话,就会执行else操作,也就起到了和inserted相同的作用。

   一般学习有两个渠道,一是上网查资料, 二是买书,我是比较喜欢买书的人,因为按照书的目录我做计划更容易一点,还有知识点不会遗漏。我的技巧是先看好目录,然后大致翻一遍,然后每章每节都问问自己,在这章节 我要学会什么? 带着疑问去学,然后把自己想要的答案弄出来,相当于Demo. 不这样做我可以翻几页就睡着了。

 五、AJAX实现

else在try...except...else...finally的流程控制语法中同样适用,当程序没走进except时,就会使用else 中的代码,我们就不需要定义状态变量来记录程序是否走入except,代码如下:

4.模拟演练,最大化优化。

5.1 准备工作(后台设定):

1 def login(request):
2     print('hello ajax')
3     return render(request,'index.html')
4  
5 def ajax_get(request):
6     return HttpResponse('hello')
def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("error: division by 0!")
    else:
        print "result = %s" % result
    finally:
        print("divide finished!")

   大家如果按照我的想法到了这个环节,估计想拿项目练习了,但是我想说的是我认为我成长最快的阶段不是拿着多少项目练习,而已把一个项目优化了足足2年,可能大家说有什么好优化的,能实现功能不就行了吗?当然不是。当我进行到3个月的时候我发现之前我不懂的东西太多了,忽然之间觉得自己什么都不是,当然这也是我自己的想法,通过这个我学会了框架。

5.2 AJAX**核心(XMLHttpRequest)**

      其实AJAX就是在Javascript中多添加了一个对象:XMLHttpRequest对象。所有的异步交互都是使用XMLHttpServlet对象完成的。也就是说,我们只需要学习一个Javascript的新对象即可。

1 var xmlHttp = new XMLHttpRequest();(大多数浏览器都支持DOM2规范)

注意,各个浏览器对XMLHttpRequest的支持也是不同的!为了处理浏览器兼容问题,给出下面方法来创建XMLHttpRequest对象:

图片 5图片 6

 1 function createXMLHttpRequest() {
 2         var xmlHttp;
 3         // 适用于大多数浏览器,以及IE7和IE更高版本
 4         try{
 5             xmlHttp = new XMLHttpRequest();
 6         } catch (e) {
 7             // 适用于IE6
 8             try {
 9                 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
10             } catch (e) {
11                 // 适用于IE5.5,以及IE更早版本
12                 try{
13                     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
14                 } catch (e){}
15             }
16         }            
17         return xmlHttp;
18     }

View Code

本文由澳门新葡亰手机版发布于编程,转载请注明出处:自学成才之路,使用else代替状态变量

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文