重构JS代码:让JS代码平面化

js中的嵌套函数用的很多,很牛叉,那为何要平面化?

易懂(自己及他人)

易修改(自己及他人)

平时Ajax调用写法(基于jQuery)

$.post('url', jsonObj,
                function (data)
                {
                      if(data)
                      {
                           var tips = $.ligerDialog.tip({ title: 'Tip', content: 'Operation successful!' });
                           setTimeout(function () { tips.close(); }, 2000);
                      }
                      else
                      {
                            var tips = $.ligerDialog.tip({ title: 'Tip', content: 'Operation Failed!' });
                            setTimeout(function () { tips.close(); }, 2000);
                      }
                }
        );

缺点是什么?

函数嵌套后,理解起来比较吃力

函数嵌套后,一行函数调用写成了很多行,很容易因为逗号、括号等造成语法 错误

jQuery和liger在应用代码中强耦合,要是以后要更换UI框架,需要进行地毯 式搜索...

加入延迟特性 - Deferred

var ajaxHandler = $.post('url', params);
ajaxHandler.done(checkServerResponse);

var checkServerResponse=function(result)
{
      if(result)
       {
             var tips = $.ligerDialog.tip({ title: 'Tip', content: 

'Operation successful!' });
              setTimeout(function () { tips.close(); }, 2000);
        }
        else
        {
                var tips = $.ligerDialog.tip({ title: 'Tip', content: 

'Operation Failed!' });
                setTimeout(function () { tips.close(); }, 2000);
         }
}

释疑:

   改后的js与先前的没有很大区别:如果js采用了OO方式编写, 再来看这段代码就很清晰了(可以简单的把checkServerResponse理解为一个 private的class方法,这样会很容易理解编写意图)
   要是有多个ajax请求呢?可以写成$.when($.post('url1'), $.post('url2')).done(this.checkServerResponse);类似于合并的意思,并且 checkServerResponse函数的参数是2个,分别对应2个ajax请求的result
   要是有多个后续请求呢?可以写成$.when($.post(url)).then (handler1).then(handler2).done(successHandler).always (alwaysHandler).fail(failHandler);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, function
, ligerdialog
, operation
, settimeout
, tip
, tips
, jquery.post
重构js
,以便于您获取更多的相关知识。

时间: 2025-01-11 13:06:23

重构JS代码:让JS代码平面化的相关文章

统计有多少行JS代码和ASP代码

js|统计 计算当前文件夹中,有多少行JS代码和ASP代码,并且还可统计代码有多少字节有示例代码 [复制此代码]CODE:<% '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ '\\ '\\    来自 codeproject.com '\\    计算js和asp代码 '\\    修改 bluedestiny '\\    mail:bluedestiny at 126.com '\\ '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

小工具:计算当前文件夹中,有多少行JS代码和ASP代码,并且还可统计代码有多少字节

js|统计 计算当前文件夹中,有多少行JS代码和ASP代码,并且还可统计代码有多少字节 有示例代码 <%'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\'\\    from codeproject.com'\\    calculate code'\\    bluedestiny'\\    mail:bluedestiny at 126.com'\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ opt

统计有多少行JS代码和ASP代码,并有多少字节

js|统计    计算当前文件夹中,有多少行JS代码和ASP代码,并且还可统计代码有多少字节      有示例代码      <%   '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\   '\\   '\\ 来自 codeproject.com   '\\ 计算js和asp代码   '\\ 修改 bluedestiny   '\\ mail:bluedestiny at 126.com   '\\   '\\\\\\\\\\\\\\\\\\\\\\\\\

利用JS延迟加载百度分享代码,提高网页速度

发现很多网站在放置百度分享代码的时候,简单的将分享代码放置到固定的网页位置就完事了,这是非常致命的方式.因为,我经常打开一个网页的时候,发现在网页加载到分享代码的时候,有时候花上几秒的时候来请求百度的服务器,最后展示分享按钮. 其实,像这样对网页来说不是非常重要的功能,我们大可以用JS来延迟加载,从而提高网页主要内容的快速加载显示. 这里分享下我的放置方式.一.copy百度分享代码,如下: 复制代码 代码如下: <!-- Baidu Button BEGIN --> <div id=&q

java与js代码互调示例代码

用到java和js方法互调,在用HTML5做跨平台应用开发时经常会用到,在这里分享一些自己在实际开发过程中的用法,希望对初学者有所帮助   在用HTML5做跨平台应用开发时,尝尝会用到java和js方法互调的问题,对初学者而言,可能会有点难,在这里分享一些自己在实际开发过程中的用法,希望对你有帮助: 首先是js代码调用java代码介绍: 复制代码 代码如下: public class CzingLBWebMain extends DroidGap { @Override public void

js异步动态加载js与css文件代码

 jquery动态加载css,js文件方法简单很, 例 方法1: 代码如下 $.getscript("test.js"); 方法2: 代码如下 function loadjs(file){  var head = $('head').remove('#loadscript');  $("<scri"+"pt>"+"</scr"+"ipt>").attr({src:file,type:

js导出txt示例代码

 很多新手朋友们都不知道js怎么导出txt,下面有个不错的示例,大家可以参考下 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" lang="en&qu

两种js获取当前域名代码

 今天给各位朋友介绍两种js获取当前域名  代码如下 //获取当前域名 1.window.location.host; 2.document.domain; //获取当前页面地址 url = window.location.href;   例子  代码如下 <script language="javascript"> //获取域名 host = window.location.host; host2=document.domain; //获取页面完整地址 url = win

js添加marquee的代码...........

问题描述 js添加marquee的代码........... 我想为这些name加上marquee效果 求代码 只能用JS写 解决方案 var list=[/*.....................*/] for(var i=0;i<list.length;i++)document.write('<marquee>'+list[i].name+'</marquee>')

简单的JS轮播图代码_javascript技巧

在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用面向过程函数式编程去实现,相对于面向对象设计模式,代码难免会显得臃肿冗余.但没有面向对象的抽象却很适合新手理解与学习.已经在BAT的同学看到希望少喷点.另外可以多提意见. 轮播图的原理: 一系列的大小相等的图片平铺,利用CSS布局只显示一张图片,其余隐藏.通过计算偏移量利用定时器实现自动播放,或通过