深刻理解ajax的success和error的实质和执行过程

ajax执行成功 的条件是:

  • 找得到正确的url地址,如果地址写错, ajax会失败
  • 网络正常;
  • 重要的是, 后台文件的执行要能完成. 这里说的 完成是指, 代码执行能够执行到 后台文件(函数) 的结束 处: "}", 只要中间没有错误(是指语法错误, 不管你地业务逻辑是否正确/错误?), 能够顺利执行到 } 结束就表示成功.
    这时在network中查看返回的状态码是200, 就是成功, 就能执行ajax的 success分支!

重要的是, 代码执行成功, 跟 该后台函数返回什么 是没有什么关系的! 而且, 200状态码 跟文件内部的 逻辑错误/正确 也是没有什么关系的! 所以说, 如果代码能够 "无语法错误" 地执行结束, 即使函数 返回什么 "false", 返回什么"failed"等, 也是成功的! 而且后台函数函数是可以返回很多内容的, 包括: 返回一个完整地html文件, 一段 script脚本, 一个json字符串, 一个普通字符串等等都是可以的.

所以, 在你执行 success分支的时候, 要严格地检查返回的数据, 并不是说, success分支的回调函数的 ret就一定是 后台返回的数据.
后台会返回 所有输出的内容, 包括 echo, print, print_r, dump的内容.

所以,  即使ajax成功也不一定就保证是返回的ret 就是指定的字符串 addSuccess
	// 所以 要判断
	alert('请注意: ajax成功,但是 数据并没有增加成功!');

反之, 如果url地址错误(比如没有找到这个后台文件), 或者网络失败; 或者 后台文件在执行过程 中,出现了 语法错误, 或者,在操作数据库的过程中(比如插入数据库的过程中), 出现了错误, 以至于代码 在中途就停止了, 不能执行完到 "}", 那么这时候, 自然就是 "服务器内部错误"了, 自然就要执行ajax失败 错误的分支 : error了.

======================================================

php中的函数格式?

  • 基本上, 关于数组操作的 函数, 第一个参数是 '分割符号, 比如横线-',或者'要查找的字符串 $search'等等, 函数的第二个参数通常是 数组! $array, 而第三个参数通常是可选的
    bool $restrict=true/false, 表示的是, 是否要进行严格的 类型检查, 或者字符串要严格区分大小写.

  • 比如: explode/implode的用法是: explode('分割字符', $arr, $restrict) , 注意分割字符seperator必须要写, 否则会返回false, 其次就是, 两个参数的顺序不能写反
    了, seperator必须在 $arr的前面

  • 再比如: array_search函数, 根据元素的值, 查找元素对应的key, 格式就是 array_search($val, $array) 它返回val对应的key值

===================================================

当要获取页面中的图片, 特别是一些图标图片, 你只要在页面中能看得到它, 就可以通过firefox的调试器 下载找到它, 不一定要通过页面的注册来下载!
要修改firefox调试器中的 元素的css属性, 除了在 inspector/style editor中修改外, 还可以直接在 computed标签页的 图框 上修改 margin/border/padding的值! 非常直观!

tp中的volist和foreach的区别?

  • volist主要用来输出数组, foreach可以用来输出对象, 功能上来说volist更多, foreach可以写得更简洁. 效率高低不存在;

  • 最主要的是, 容易出错的地方是: 第一, 两者的循环单变量不同, 一个是id, 一个是 item; 第二 volist有默认的循环key是: i, 而foreach也有默认的循环变量key是: key. 这个在以前没有注意, 以为还是i, 结果取不到值, 在更换foreach /volist的时候, 容易忘记修改 id /item.

  • 在volist/foreach 中遍历数组中的元素时, 要注意: 因为 数组中的元素下标 是从 0 开始的, 比如传递过来的数组 就是: $arr = array(0 => 'foo', 1 => 'bar', ....) 而volist中的 key/i 是从1开始的, 所以 第一个遍历的 {$arr[$i]} 是: {$arr[1]} , 实际上就是 $arr的 第二个元素了, 这样就出错了!
    为了 根据 $i 来正确的读取元素, 要让$i也从0开始, 就要用 $i-1 : 那就是: {$arr[$i-1]}

======================================================

检查图片是否存在, 如果不存在就用默认的图片来代替?
使用onerror属性, 为了解决替代图片也不存在, 引发onerror循环迭代 栈出错的问题, 要加 this.onerror=null, 只允许onerror执行一次
<img src="__PUBI__/.....", onerror="this.src='__PUBLIC__/..../default_use.png'; this.onerror=null;"

mysql的单表最多容纳多少条记录?

-从理论上来说, 一个数据库下可以 容纳20亿个表? (实际中, 数据库中的表 在200个以下 比较合理); 一个表中的记录数是没有限制的, 一个表字段个数最大是 1024个字段; 一条记录最大字节是8092个字节(如果一条字节记录的长度超过8092个(不包括文本文件和图片类型的长度), 在插入时会产生 sql语句失败, 并产生错误信息)

  • 分表/分库 太多, 容易造成程序逻辑复杂,降低性能, 增加出错的风险点.而且如果数据量太多, 只是分表其实也解决不了性能问题,因为磁盘io首先会达到瓶颈(是不是指从磁盘加载大的表文件到内存的时间太久达到性能瓶颈??) 所以通常不做分库分表
  • mysql对数据库下的表数量 , 度度说单表记录数是 2000万条,阿啊"开发手册"说是 500万条. 理论上单表的记录条数其实是没有限制的, 这个取决于 mysql的设置和 os+机器的配置(即操作系统对单个文件的大小限制, 机器的内存大小等).

一般来说,如果3年内单表的数据量达不到那个数目(就是500万条?) 在开始设计开发的时候,就不用考虑分表分库. innoDB会把表的索引载入内存, 只要innoDB的buffer size尺寸足够(即内存)查询不会有问题, 更应该考虑io的限制.
所以更多的是: 对表/库/机器配置做优化: 比如: 增加机器的整体硬件配置, 增加内存条; 对表创建索引; 改表的引擎为myisam

其实这个问题很重要的, 它牵涉到你在开发的时候, 是不是要考虑 删除表 中的 一些历史数据? 更具体的就是: 是不是要设计一些 删除页面 /删除功能等等. 有的时候你就不必要去删除历史数据, 去设计删除页面了.

=====================================================

为什么html页面中多使用class类而较少使用 id? 因为 class类可以和其他类 写在一起, 同时写在 class属性中, 而不用再写 id属性了, 想比之下要写得少一些, 而且类的使用/处理 函数要多一些, 比如有 addClass, hasClass, removeClass等处理函数, 而id则没有这些处理函数

要显示作为css 背景的background:url('图片地址')的图片, 要设置 超链接a 标签的 padding-left属性为16px, 否则由于a标签 的内容为空, a会塌陷, 那么作为它背景的css图片就不能显示出来

  • 其次, css背景图片的属性有 url地址, 重复属性; 位置属性.
    重复属性是: x-repeat, y-repeat, no-repeat
    位置属性是指, 背景图片相对于它的容器 的左上角的位置, 有些背景图片是多个图标合在一起的, 要显示第一个图片的位置是 0 0, 第一个图标的 右边的图标就是 -16px 0 | -32px 0 |-48px 0... (相对于容器元素的水平位置就是向左移动, 向左移动就是负数), 第一个图标下边的图标位置就是 0 -16px | 0 -32px |.... (相对于容器元素的位置就应该是向上移动 , 向上移动就是 负数...) 右下角中间的图标位置 就是 两个负数相对位置....
	    .list-collapse{
	      background: url('__PUBLIC__/images/rklist_arrows.png') no-repeat 0 0;
	    }
	    .list-expand{
	      background: url('__PUBLIC__/images/rklist_arrows.png') no-repeat -16px 0;
	    }

	  <h5 style="font-size: 1.15em;"> 展开或折叠的内容:  &nbsp;&nbsp;<span id="toggle" > <a href="javascript: void(0)" style="padding-left: 16px;" class="list-collapse" id="dwck"></a></span></h5>

=============================================================

点击一个控制元素, 让另一个被控制的元素显示/隐藏, 同时改变 控制元素的 图标和文字说明?

  • 使用 jquery的 toggle(0,'linear'); 方法
  • 但是使用 toggle方法的 后面的参数 fn1, fn2,....好像不好用 ????
  • 所以使用了 自己判断点击次数的方法:
      var iClk =0;
      $('a#cktoggle').click(function(){
	++iClk;
	$('div.rklist').toggle(0,'linear');

	if(iClk%2 ==1){
	  $('span#dwck').attr('class','rklist-expand');
	  $('span.description').text('展开');
	}else{
	  $('span#dwck').attr('class','rklist-collapse');
	  $('span.description').text('折叠');
	}
      });

html代码是: 	 
 <h5 style="font-size: 1.15em;"> 折叠/展开: <a href="javascript:void(0)" id="cktoggle">
    <span href="javascript: void(0)" style="padding-left: 16px;" class="rklist-collapse" id="dwck"></span>
    <span class="description">折叠</span>
   </a></h5>

=====
设置背景图片的css格式是: background: bg-color url('...') no-repeat 0 0 , 好像background-size的大小要单独写, 可以是具体的数字, 也可以是百分比....缩小的图片.

#############

原文地址:https://www.cnblogs.com/bkylee/p/12390972.html